Login + Register with Extra Info (Profile)
- Get link
- X
- Other Apps
authdemo/
│
├── authdemo/ ← Project folder
│ └── urls.py
│
├── users/ ← Custom user app
│ ├── views.py
│ ├── forms.py
│ ├── urls.py
│ └── templates/
│ └── users/
│ ├── login.html
│ └── home.html
│
└── manage.py
Step 1: Project Setup
django-admin startproject authdemo
cd authdemo
python manage.py startapp users
✅ Step 2: Add App to settings.py
# authdemo/settings.py INSTALLED_APPS = [ ..., 'users', 'django.contrib.auth', 'django.contrib.sessions', ]✅ Step 3: Create Profile Model# users/models.pyfrom django.db import modelsfrom django.contrib.auth.models import Userclass Profile(models.Model):user = models.OneToOneField(User, on_delete=models.CASCADE)phone = models.CharField(max_length=15)address = models.TextField()dob = models.DateField(null=True, blank=True)gender = models.CharField(max_length=10, choices=[('male','Male'),('female','Female')])def __str__(self):return self.user.username✅ Step 4: Make Migrationspython manage.py makemigrations python manage.py migrate✅ Step 5: Create Register Form
from django import formsfrom django.contrib.auth.models import Userclass CustomRegisterForm(forms.ModelForm):password = forms.CharField(widget=forms.PasswordInput)confirm_password = forms.CharField(widget=forms.PasswordInput)# Extra fieldsphone = forms.CharField()address = forms.CharField(widget=forms.Textarea)dob = forms.DateField(widget=forms.DateInput(attrs={'type': 'date'}))gender = forms.ChoiceField(choices=[('male','Male'), ('female','Female')])class Meta:model = Userfields = ['username', 'email', 'password']def clean(self):cleaned_data = super().clean()p1 = cleaned_data.get('password')p2 = cleaned_data.get('confirm_password')if p1 and p2 and p1 != p2:raise forms.ValidationError("Passwords do not match")✅ Step 6: Create Views# users/views.pyfrom django.shortcuts import render, redirectfrom django.contrib.auth import authenticate, login, logoutfrom .forms import CustomRegisterFormfrom .models import Profiledef register_view(request):if request.method == 'POST':form = CustomRegisterForm(request.POST)if form.is_valid():user = form.save(commit=False)user.set_password(form.cleaned_data['password'])user.save()Profile.objects.create(user=user,phone=form.cleaned_data['phone'],address=form.cleaned_data['address'],dob=form.cleaned_data['dob'],gender=form.cleaned_data['gender'])return redirect('login_view')else:form = CustomRegisterForm()return render(request, 'register.html', {'form': form})def login_view(request):error = Noneif request.method == 'POST':username = request.POST.get('username')password = request.POST.get('password')user = authenticate(username=username, password=password)if user:login(request, user)return redirect('home')else:error = 'Invalid credentials'return render(request, 'login.html', {'error': error})def logout_view(request):logout(request)return redirect('login_view')from django.contrib.auth.decorators import login_required@login_requireddef home_view(request):return render(request, 'home.html')✅ Step 7: Add Templates
📄
register.html<h2>Register</h2><form method="post">{% csrf_token %}{{ form.as_p }}<button type="submit">Register</button><a href="{% url 'login_view' %}">Already have an account? Login</a></form>📄login.html<h2>Login</h2>{% if error %}<p style="color:red">{{ error }}</p>{% endif %}<form method="post">{% csrf_token %}Username: <input type="text" name="username"><br><br>Password: <input type="password" name="password"><br><br><button type="submit">Login</button><a href="{% url 'register_view' %}">Don't have an account? Register</a></form>📄home.html<h2>Welcome {{ request.user.username }}</h2> <a href="{% url 'logout_view' %}">Logout</a>✅ Step 8: Setup URLs
🔹
users/urls.pyfrom django.urls import pathfrom . import viewsurlpatterns = [path('register/', views.register_view, name='register_view'),path('login/', views.login_view, name='login_view'),path('logout/', views.logout_view, name='logout_view'),path('', views.home_view, name='home'),]🔹authdemo/urls.pyfrom django.contrib import adminfrom django.urls import path, includeurlpatterns = [path('admin/', admin.site.urls),path('', include('users.urls')),]✅ Step 9: Create Superuser (Optional)python manage.py createsuperuser✅ Step 10: Run the Serverpython manage.py runserver✅ Result: 📝 /register/ → Registration form with extra fields 🔐 /login/ → Login form 🏠 / → Home page (login required) 🚪 /logout/ → Logout
- Get link
- X
- Other Apps
Comments
Post a Comment