Sobes.tech
Middle+

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:

  1. Xüsusi istifadəçi modelini yaradın.

    Onu AbstractUser və ya AbstractBaseUser-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
    
  2. Django-nun xüsusi istifadəçi modelini istifadə etməsini tənzimləyin.

    settings.py faylında AUTH_USER_MODEL-i öz modelinizə göstərin.

    // settings.py
    AUTH_USER_MODEL = 'users.CustomUser'
    
  3. Qeydiyyat və autentifikasiya üçün formalar yaradın.

    UserCreationFormAuthenticationForm-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
    
  4. 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')
    
  5. 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.py faylı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')),
    ]
    
  6. 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>
    
  7. 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 None
    

    settings.py-də bu Backend-i göstərin.

    // settings.py
    AUTHENTICATION_BACKENDS = [
        'users.backends.EmailBackend',
        'django.contrib.auth.backends.ModelBackend',
    ]
    
  8. 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.