<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Asina Abdullahi</title>
    <description>The latest articles on DEV Community by Asina Abdullahi (@asina_abdullahi_bc4556388).</description>
    <link>https://dev.to/asina_abdullahi_bc4556388</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4045218%2F2b99a8e2-2810-4821-81de-a1fa9d753738.png</url>
      <title>DEV Community: Asina Abdullahi</title>
      <link>https://dev.to/asina_abdullahi_bc4556388</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/asina_abdullahi_bc4556388"/>
    <language>en</language>
    <item>
      <title>django framework</title>
      <dc:creator>Asina Abdullahi</dc:creator>
      <pubDate>Fri, 24 Jul 2026 09:17:49 +0000</pubDate>
      <link>https://dev.to/asina_abdullahi_bc4556388/django-framework-4jnb</link>
      <guid>https://dev.to/asina_abdullahi_bc4556388/django-framework-4jnb</guid>
      <description>&lt;p&gt;Building PetPal with Django: Authentication, User Roles, and a Pet Adoption System&lt;br&gt;
Introduction&lt;/p&gt;

&lt;p&gt;As part of a Django assignment, I was required to start from an existing Django starter template and build a complete web application with a fully functional authentication system. Instead of creating a simple CRUD application, I decided to build PetPal, a pet adoption platform that allows adopters to browse pets and submit adoption requests while giving shelter administrators tools to manage pets and requests.&lt;/p&gt;

&lt;p&gt;This article walks through my development process, the challenges I faced, and what I learned.&lt;/p&gt;

&lt;p&gt;Project Requirements&lt;/p&gt;

&lt;p&gt;The project had several requirements:&lt;/p&gt;

&lt;p&gt;Build from the provided Django starter template&lt;br&gt;
User registration&lt;br&gt;
User login&lt;br&gt;
Password reset&lt;br&gt;
Password change&lt;br&gt;
Profile image upload&lt;br&gt;
At least two user types&lt;br&gt;
Tailwind CSS frontend&lt;br&gt;
Progressive Web App (PWA) features&lt;br&gt;
Deploy the application&lt;br&gt;
Write documentation&lt;br&gt;
Choosing My Project&lt;/p&gt;

&lt;p&gt;I chose to build PetPal, a simple pet adoption management system.&lt;/p&gt;

&lt;p&gt;The application has two types of users:&lt;/p&gt;

&lt;p&gt;Adopters&lt;br&gt;
Shelter Administrators&lt;/p&gt;

&lt;p&gt;This separation made the application feel more realistic and allowed me to implement role-based functionality.&lt;/p&gt;

&lt;p&gt;Authentication&lt;/p&gt;

&lt;p&gt;The starter template already included Django authentication using django-allauth.&lt;/p&gt;

&lt;p&gt;I customized it to support:&lt;/p&gt;

&lt;p&gt;User Registration&lt;br&gt;
User Login&lt;br&gt;
Forgot Password&lt;br&gt;
Password Reset&lt;br&gt;
Password Change&lt;br&gt;
Logout&lt;/p&gt;

&lt;p&gt;I also configured user profile images so every user can upload their own avatar.&lt;/p&gt;

&lt;p&gt;User Roles&lt;/p&gt;

&lt;p&gt;One of the assignment requirements was supporting multiple user types.&lt;/p&gt;

&lt;p&gt;I implemented two roles:&lt;/p&gt;

&lt;p&gt;Adopter&lt;/p&gt;

&lt;p&gt;An adopter can:&lt;/p&gt;

&lt;p&gt;Register&lt;br&gt;
Login&lt;br&gt;
Browse available pets&lt;br&gt;
View pet details&lt;br&gt;
Submit adoption requests&lt;br&gt;
View only their own requests&lt;br&gt;
Cancel pending requests&lt;br&gt;
Update their profile&lt;br&gt;
Shelter Admin&lt;/p&gt;

&lt;p&gt;The shelter administrator can:&lt;/p&gt;

&lt;p&gt;Add pets&lt;br&gt;
Edit pets&lt;br&gt;
Delete pets&lt;br&gt;
View all adoption requests&lt;br&gt;
Approve requests&lt;br&gt;
Reject requests&lt;br&gt;
Manage available pets&lt;br&gt;
Database Design&lt;/p&gt;

&lt;p&gt;The application revolves around three main models.&lt;/p&gt;

&lt;p&gt;Custom User&lt;/p&gt;

&lt;p&gt;I used the starter template's custom user model and extended it with:&lt;/p&gt;

&lt;p&gt;Profile picture&lt;br&gt;
User type&lt;br&gt;
Pet&lt;/p&gt;

&lt;p&gt;Each pet stores:&lt;/p&gt;

&lt;p&gt;Name&lt;br&gt;
Species&lt;br&gt;
Breed&lt;br&gt;
Age&lt;br&gt;
Gender&lt;br&gt;
Description&lt;br&gt;
Image&lt;br&gt;
Status&lt;br&gt;
Adoption Request&lt;/p&gt;

&lt;p&gt;Each adoption request stores:&lt;/p&gt;

&lt;p&gt;User&lt;br&gt;
Pet&lt;br&gt;
Request status&lt;br&gt;
Date submitted&lt;/p&gt;

&lt;p&gt;The relationships between these models make it easy to track which user requested which pet.&lt;/p&gt;

&lt;p&gt;Pet Adoption Workflow&lt;/p&gt;

&lt;p&gt;The application follows a simple workflow.&lt;/p&gt;

&lt;p&gt;The user logs in.&lt;br&gt;
The user browses available pets.&lt;br&gt;
The user opens a pet's details page.&lt;br&gt;
The user submits an adoption request.&lt;br&gt;
The request is marked as Pending.&lt;br&gt;
The administrator reviews the request.&lt;br&gt;
The administrator either approves or rejects it.&lt;br&gt;
If approved, the pet is marked as adopted and is no longer shown in the available pets list.&lt;/p&gt;

&lt;p&gt;This prevents multiple users from requesting the same adopted pet.&lt;/p&gt;

&lt;p&gt;User Dashboard&lt;/p&gt;

&lt;p&gt;The adopter dashboard focuses on personal information.&lt;/p&gt;

&lt;p&gt;It displays:&lt;/p&gt;

&lt;p&gt;Number of adoption requests&lt;br&gt;
Pending requests&lt;br&gt;
Approved requests&lt;br&gt;
Quick navigation to Browse Pets&lt;br&gt;
Quick navigation to My Requests&lt;/p&gt;

&lt;p&gt;The My Requests page only shows requests belonging to the currently logged-in user.&lt;/p&gt;

&lt;p&gt;Pending requests can be cancelled, while approved and rejected requests become read-only.&lt;/p&gt;

&lt;p&gt;Admin Dashboard&lt;/p&gt;

&lt;p&gt;The administrator dashboard focuses on management rather than browsing.&lt;/p&gt;

&lt;p&gt;It includes:&lt;/p&gt;

&lt;p&gt;Pet management&lt;br&gt;
Adoption request management&lt;br&gt;
User management&lt;br&gt;
Dashboard statistics&lt;/p&gt;

&lt;p&gt;This creates a clear separation between the administrator and adopter experiences.&lt;/p&gt;

&lt;p&gt;Challenges I Faced&lt;/p&gt;

&lt;p&gt;Like most Django projects, development wasn't completely smooth.&lt;/p&gt;

&lt;p&gt;Some challenges included:&lt;/p&gt;

&lt;p&gt;Configuring the starter template correctly.&lt;br&gt;
Understanding how Django's authentication system works.&lt;br&gt;
Connecting models using foreign keys.&lt;br&gt;
Preventing duplicate adoption requests.&lt;br&gt;
Making sure users only see their own requests.&lt;br&gt;
Configuring password reset emails using Gmail SMTP.&lt;br&gt;
Preparing the application for deployment.&lt;/p&gt;

&lt;p&gt;Each challenge helped me better understand how Django handles authentication, models, views, templates, and permissions.&lt;/p&gt;

&lt;p&gt;Technologies Used&lt;br&gt;
Django&lt;br&gt;
Python&lt;br&gt;
HTML&lt;br&gt;
Tailwind CSS&lt;br&gt;
SQLite (development)&lt;br&gt;
PostgreSQL (production)&lt;br&gt;
Django Allauth&lt;br&gt;
Git&lt;br&gt;
GitHub&lt;br&gt;
What I Learned&lt;/p&gt;

&lt;p&gt;This project taught me much more than creating CRUD pages.&lt;/p&gt;

&lt;p&gt;I learned how to:&lt;/p&gt;

&lt;p&gt;Extend Django's custom user model&lt;br&gt;
Implement role-based access control&lt;br&gt;
Handle image uploads&lt;br&gt;
Build authentication flows&lt;br&gt;
Connect related models&lt;br&gt;
Manage user permissions&lt;br&gt;
Build a real-world application using Django&lt;/p&gt;

&lt;p&gt;Most importantly, I gained confidence working with Django's project structure and understanding how different components fit together.&lt;/p&gt;

&lt;p&gt;Future Improvements&lt;/p&gt;

&lt;p&gt;Some features I would like to add include:&lt;/p&gt;

&lt;p&gt;Email notifications for adoption status updates&lt;br&gt;
Search and filtering by species or breed&lt;br&gt;
Favorite pets&lt;br&gt;
Shelter profiles&lt;br&gt;
Adoption history&lt;br&gt;
Appointment scheduling&lt;br&gt;
Admin analytics dashboard&lt;br&gt;
Conclusion&lt;/p&gt;

&lt;p&gt;Building PetPal allowed me to apply Django concepts to a practical problem. Instead of focusing only on authentication, I built an application with meaningful user roles, profile management, and a complete adoption workflow.&lt;/p&gt;

&lt;p&gt;Although there were challenges along the way, solving them improved my understanding of Django development and prepared me for building larger web applications in the future.&lt;/p&gt;

&lt;p&gt;Thank you for reading!&lt;/p&gt;

</description>
      <category>backend</category>
      <category>django</category>
      <category>python</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
