目录
1.2 配置用戶註冊時密碼複雜度的檢查AUTH_PASSWORD_VALIDATORS
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,可以在后续的请求中进行身份验证。