Django-da xüsusi autentifikasiya sistemini necə həyata keçirmək olar?
sobes.tech Süni İntellekt
AI-dan cavab
Django-da xüsusi avtorizasiya sistemini həyata keçirmək üçün aşağıdakı addımları yerinə yetirmək lazımdır:
-
Xüsusi istifadəçi modelini yaradın.
Onu
AbstractUservə yaAbstractBaseUser-dən irs almaq və sisteminiz üçün lazım olan sahələri müəyyən etmək.// users/models.py from django.contrib.auth.models import AbstractUser from django.db import models class CustomUser(AbstractUser): # Əlavə sahələr, məsələn, telefon nömrəsi phone_number = models.CharField(max_length=15, blank=True, null=True) def __str__(self): return self.username -
Django-nun xüsusi istifadəçi modelini istifadə etməsini tənzimləyin.
settings.pyfaylındaAUTH_USER_MODEL-i öz modelinizə göstərin.// settings.py AUTH_USER_MODEL = 'users.CustomUser' -
Qeydiyyat və autentifikasiya üçün formalar yaradın.
UserCreationFormvəAuthenticationForm-dan istifadə edin və lazım gəldikdə onları irs alın və xüsusi sahələr əlavə edin.// users/forms.py from django import forms from django.contrib.auth.forms import UserCreationForm, AuthenticationForm from .models import CustomUser class CustomUserCreationForm(UserCreationForm): class Meta(UserCreationForm.Meta): model = CustomUser fields = ('username', 'email', 'phone_number') class CustomAuthenticationForm(AuthenticationForm): pass -
Formaları işləyən görünüşlər (views) yaradın.
Formaları göstərmək, POST sorğularını işləmək və istifadəçi autentifikasiyası və çıxış üçün funksiyalar və ya siniflər istifadə edin.
// users/views.py from django.shortcuts import render, redirect from django.contrib.auth import login, logout, authenticate from .forms import CustomUserCreationForm, CustomAuthenticationForm def signup_view(request): if request.method == 'POST': form = CustomUserCreationForm(request.POST) if form.is_valid(): user = form.save() login(request, user) return redirect('home') else: form = CustomUserCreationForm() return render(request, 'users/signup.html', {'form': form}) def login_view(request): if request.method == 'POST': form = CustomAuthenticationForm(request, data=request.POST) if form.is_valid(): username = form.cleaned_data.get('username') password = form.cleaned_data.get('password') user = authenticate(username=username, password=password) if user is not None: login(request, user) return redirect('home') else: form = CustomAuthenticationForm() return render(request, 'users/login.html', {'form': form}) def logout_view(request): logout(request) return redirect('home') -
URL-ləri tənzimləyin.
Qeydiyyat, giriş və çıxış üçün URL-lər təyin edin və onları müvafiq görünüşlərə bağlayın.
// users/urls.py from django.urls import path from . import views urlpatterns = [ path('signup/', views.signup_view, name='signup'), path('login/', views.login_view, name='login'), path('logout/', views.logout_view, name='logout'), ]Bu URL-ləri layihənizin əsas
urls.pyfaylına əlavə edin.// your_project/urls.py from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('accounts/', include('users.urls')), ] -
HTML şablonları yaradın.
Qeydiyyat və giriş formaları üçün HTML şablonları yaradın.
<!-- users/templates/users/signup.html --> <h2>Qeydiyyat</h2> <form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">Qeydiyyatdan keç</button> </form> <!-- users/templates/users/login.html --> <h2>Giriş</h2> <form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">Daxil ol</button> </form> -
Backend autentifikasiyasını tənzimləyin, lazım gəldikdə.
Əgər istifadəçi adı və şifrə xaricində başqa parametrlərlə autentifikasiya tələb olunursa, xüsusi Backend yaradın.
// users/backends.py from django.contrib.auth.backends import BaseBackend from django.contrib.auth import get_user_model class EmailBackend(BaseBackend): def authenticate(self, request, username=None, password=None, **kwargs): UserModel = get_user_model() try: user = UserModel.objects.get(email=username) except UserModel.DoesNotExist: return None if user.check_password(password): return user return None def get_user(self, user_id): UserModel = get_user_model() try: return UserModel.objects.get(pk=user_id) except UserModel.DoesNotExist: return Nonesettings.py-də bu Backend-i göstərin.// settings.py AUTHENTICATION_BACKENDS = [ 'users.backends.EmailBackend', 'django.contrib.auth.backends.ModelBackend', ] -
Veritabanı migrasiyalarını həyata keçirin.
Modeldə dəyişiklik etdikdən sonra migrasiyaları yaradın və tətbiq edin.
python manage.py makemigrations users python manage.py migrate
Bu yanaşma istifadəçi sahələrini, autentifikasiya məntiqini və görünüşü sərbəst tənzimləməyə imkan verir.