python manage.py startapp pincode_auth_app# pincode_auth_app/models.py
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
pin_code = models.CharField(max_length=4, blank=True, null=True)
***************
# pincode_auth_app/admin.py
from django.contrib import admin
from .models import CustomUser
admin.site.register(CustomUser)
***********************
python manage.py makemigrations python manage.py migrate
********************************
# pincode_auth_app/forms.py
from django import forms
class PinCodeLoginForm(forms.Form):
username = forms.CharField(max_length=150) pin_code = forms.CharField(max_length=4, widget=forms.PasswordInput)
*********************************
# pincode_auth_app/views.py
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
from .forms import PinCodeLoginForm
def pin_code_login(request):
if request.method == 'POST':
form = PinCodeLoginForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
pin_code = form.cleaned_data['pin_code']
user = authenticate(request, username=username, pin_code=pin_code)
if user is not None:
login(request, user)
return redirect('success_page') # Redirect to a success page
else:
# Authentication failed
return render(request, 'login.html', {'form': form, 'error': 'Invalid username or pin code'})
else:
form = PinCodeLoginForm()
return render(request, 'login.html', {'form': form})
*************************************
<!-- pincode_auth_app/templates/login.html -->
<!DOCTYPE html>
<html>
<head>
<title>Pin Code Login</title>
</head>
<body>
<h2>Login</h2>
{% if error %}
<p style="color: red;">{{ error }}</p>
{% endif %}
<form method="post" action="{% url 'pin_code_login' %}">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Login</button>
</form>
</body> </html>
*******************************
# pincode_auth/urls.py
from django.urls import path
from pincode_auth_app.views import pin_code_login
urlpatterns = [
path('pin-code-login/', pin_code_login, name='pin_code_login'),
# Add other URLs as needed
]
*******************************************
# pincode_auth/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('pincode_auth_app.urls')),