DRF 框架實現用戶自定義登錄認證

 

目录

 

1.settings.py配置

    1.1 配置應用到INSTALLED_APPS

    1.2 配置用戶註冊時密碼複雜度的檢查AUTH_PASSWORD_VALIDATORS

    1.3 配置認證

2.創建表單

3. 創建視圖

3.1  創建登錄視圖

3.2  創建自定義的認證方式

4. 配置 URL 路由

     4.1  在login應用目錄下配置url.py 

     4.2  在項目的目錄下配置url.py


1.settings.py配置

     1.1 配置應用到INSTALLED_APPS

INSTALLED_APPS = [
    'django.contrib.admin',         # 提供管理界面,管理数据库中的数据。 
    'django.contrib.auth',          # 提供用户认证和权限管理功能。
    'django.contrib.contenttypes',  # 允许创建通用的关系,支持权限系统。
    'django.contrib.sessions',      # 管理用户会话数据。
    'django.contrib.messages',      # 提供消息传递功能,用户反馈。
    'django.contrib.staticfiles',   # 管理项目的静态文件。
    'rest_framework',               # 帮助构建 RESTful API。
    'myapp',                        # 你的自定义应用,包含特定功能。
]

    1.2 配置用戶註冊時密碼複雜度的檢查AUTH_PASSWORD_VALIDATORS

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },   # 检查密码是否与用户的属性过于相似,防止用户设置过于简单的密码
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
        'OPTIONS': {
            'min_length': 8,  
        },
         
    },   # 检查密码的最小长度,不配置OPTIONS,默認長度為8
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },   # 检查密码是否在常用密码列表中
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },   # 检查密码中是否包含数字、字母
]

     1.3 配置認證

 

AUTHENTICATION_BACKENDS = ('authentication.login.CustomBackend',)  # 自定義认证路徑

AUTH_USER_MODEL = 'login_app.User'  # 设置USER表为login_app應用下的user表

如果我們只需要驗證user表裡的賬號密碼登錄,就不需要配置AUTHENTICATION_BACKENDS。

2.創建表單

from django import forms

class LoginForm(forms.Form):
    username = forms.CharField()
    password = forms.CharField(widget=forms.PasswordInput)

3. 創建視圖

3.1  創建登錄視圖

from django.contrib.auth import authenticate
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.authtoken.models import Token
from rest_framework import status
from rest_framework.permissions import AllowAny

class LoginView(APIView):
    permission_classes = [AllowAny]  # 允許任何人都可以访问

    def post(self, request, *args, **kwargs):
        username = request.data.get('username')
        password = request.data.get('password')
        
        if username is None or password is None:
            return Response({'error': 'Please provide both username and password'}, status=status.HTTP_400_BAD_REQUEST)
        
        user = authenticate(username=username, password=password)  # 驗證用戶賬號
        
        if not user:
            return Response({'error': 'Invalid credentials'}, status=status.HTTP_401_UNAUTHORIZED)
        
        token, created = Token.objects.get_or_create(user=user)    # 創建一個token
        return Response({'token': token.key})

3.2 創建自定義的認證方式

class CustomBackend(ModelBackend):

   
    def authenticate(self, request, username=None, password=None, **kwargs):
       pass  # 自定義的認證邏輯
       return True
   

4. 配置 URL 路由

     4.1  在login應用目錄下配置url.py 

from django.urls import path
from .views import RegisterView, LoginView

urlpatterns = [
    path('api/register/', RegisterView.as_view(), name='register'),  # 註冊路由
    path('api/login/', LoginView.as_view(), name='login'),           # 登錄路由
]

     4.2  在項目的目錄下配置url.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('myapp.urls')),  # 包含应用的URL
]

总结

通过上述步骤,你已经在 Django REST Framework 中实现了用户登录认证。登录时会验证用户凭据并返回一个认证 token,通过这个 token,可以在后续的请求中进行身份验证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值