国内网站速度慢霍曼科技宣布获近亿元c轮融资
2026/4/2 17:39:20 网站建设 项目流程
国内网站速度慢,霍曼科技宣布获近亿元c轮融资,wordpress固定连接设置去掉前缀,爱客crm登录Python 核心#xff1a;Django 鉴权方案全解析 Django 作为 Python 最成熟的 Web 框架#xff0c;其鉴权系统#xff08;Authentication Authorization#xff09;是核心模块之一。它提供了开箱即用的用户认证、权限控制和会话管理#xff0c;同时高度可扩展。Djan…Python 核心Django 鉴权方案全解析Django 作为 Python 最成熟的 Web 框架其鉴权系统Authentication Authorization是核心模块之一。它提供了开箱即用的用户认证、权限控制和会话管理同时高度可扩展。Django 的鉴权方案基于django.contrib.auth模块遵循“电池内置”原则但允许自定义扩展。本文从基础到高级深入解析 Django 4.x2026 最新版的鉴权方案包括原理、实现、对比和最佳实践。1. Django 鉴权系统概述核心概念认证Authentication验证用户身份谁是你如用户名/密码、Token。授权Authorization检查用户权限你能做什么如访问特定视图、操作数据。用户模型User Model默认auth.User可自定义扩展。会话管理基于 Session 或 Token 维护状态。工作原理用户请求到达视图。中间件如AuthenticationMiddleware从请求中提取凭证Cookie、Header加载用户对象到request.user。视图中使用装饰器如login_required检查认证/权限。如果未认证重定向到登录页或返回 401/403。默认配置settings.pyINSTALLED_APPS[django.contrib.auth,# 必须启用django.contrib.contenttypes,# 权限依赖]AUTH_USER_MODELauth.User# 默认用户模型可自定义如 myapp.CustomUserMIDDLEWARE[django.contrib.sessions.middleware.SessionMiddleware,# 会话支持django.contrib.auth.middleware.AuthenticationMiddleware,# 认证中间件]AUTHENTICATION_BACKENDS[django.contrib.auth.backends.ModelBackend]# 默认后端2. 内置认证方案详解Django 提供了多种开箱即用的鉴权方案按复杂度分类。2.1 基于 Session 的用户名/密码认证默认方案原理用户登录后Django 生成 Session ID 存入 Cookie服务器端存储用户状态。流程用户提交用户名/密码。调用authenticate(username, password)验证。如果成功调用login(request, user)设置 Session。后续请求携带 Cookie中间件加载request.user。代码示例views.pyfromdjango.contrib.authimportauthenticate,login,logoutfromdjango.httpimportJsonResponsedeflogin_view(request):ifrequest.methodPOST:usernamerequest.POST[username]passwordrequest.POST[password]userauthenticate(request,usernameusername,passwordpassword)ifuserisnotNone:login(request,user)returnJsonResponse({message:登录成功})else:returnJsonResponse({error:凭证无效},status401)returnJsonResponse({error:无效请求},status400)deflogout_view(request):logout(request)returnJsonResponse({message:登出成功})装饰器使用fromdjango.contrib.auth.decoratorsimportlogin_requiredlogin_required# 未登录重定向到登录页defprotected_view(request):returnJsonResponse({user:request.user.username})优点简单、安全服务器端存储。缺点不适合分布式系统需共享 Session移动端不友好。2.2 基于 Token 的认证RESTful API 常用原理登录后生成 Token返回给客户端。后续请求在 Header 中携带 Token如 Authorization: Token xxx。内置支持Django REST Framework (DRF) 扩展了 Token 认证。安装 DRFpip install djangorestframework配置settings.pyINSTALLED_APPS[rest_framework,rest_framework.authtoken]REST_FRAMEWORK{DEFAULT_AUTHENTICATION_CLASSES:[rest_framework.authentication.TokenAuthentication,rest_framework.authentication.SessionAuthentication,],}代码示例views.pyfromrest_framework.authtoken.modelsimportTokenfromrest_framework.decoratorsimportapi_view,authentication_classes,permission_classesfromrest_framework.permissionsimportIsAuthenticatedfromrest_framework.responseimportResponseapi_view([POST])defapi_login(request):# ... 验证用户名/密码 ...token,createdToken.objects.get_or_create(useruser)returnResponse({token:token.key})api_view([GET])authentication_classes([TokenAuthentication])permission_classes([IsAuthenticated])defapi_protected(request):returnResponse({user:request.user.username})客户端使用Header 中Authorization: Token key优点无状态、适合 API、分布式系统。缺点Token 泄露风险大需加密传输无内置过期机制需自定义。2.3 基于 JWT 的认证高级 Token 方案原理JSON Web TokenJWT是自包含的 Token包含用户数据、签名和过期时间。无需服务器存储。第三方库推荐djangorestframework-simplejwtpip install配置settings.pyREST_FRAMEWORK{DEFAULT_AUTHENTICATION_CLASSES:[rest_framework_simplejwt.authentication.JWTAuthentication,],}SIMPLE_JWT{ACCESS_TOKEN_LIFETIME:timedelta(minutes5),# 访问 Token 有效期REFRESH_TOKEN_LIFETIME:timedelta(days1),# 刷新 Token 有效期}代码示例fromrest_framework_simplejwt.tokensimportRefreshTokenapi_view([POST])defjwt_login(request):# ... 验证用户名/密码 ...refreshRefreshToken.for_user(user)returnResponse({refresh:str(refresh),access:str(refresh.access_token),})# 使用Header 中 Authorization: Bearer access_token优点无状态、可扩展、支持过期/刷新机制。缺点Token 较长、无法主动失效需黑名单。3. 权限控制AuthorizationDjango 的权限系统基于用户、组和权限模型。内置权限CRUD 操作如 ‘app.add_model’。检查方式装饰器permission_required(app.change_model)代码中user.has_perm(app.add_model)组用户可加入组继承组权限。自定义权限models.pyclassMeta:permissions[(can_publish,Can publish posts),]4. 自定义认证后端默认后端是用户名/密码可扩展支持邮箱、第三方登录等。自定义后端backends.pyfromdjango.contrib.auth.backendsimportModelBackendfromdjango.contrib.authimportget_user_modelclassEmailBackend(ModelBackend):defauthenticate(self,request,usernameNone,passwordNone,**kwargs):UserModelget_user_model()try:userUserModel.objects.get(emailusername)ifuser.check_password(password):returnuserexceptUserModel.DoesNotExist:returnNone配置AUTHENTICATION_BACKENDS[path.to.EmailBackend]5. 鉴权方案对比表方案状态性适用场景安全性复杂度扩展性Session有状态Web 应用、浏览器端高低中Token (DRF)无状态REST API、移动端中中高JWT无状态微服务、分布式系统高高高OAuth2无状态第三方登录如 Google高高高6. 最佳实践与注意事项自定义用户模型项目启动时就定义AbstractUser子类避免迁移问题。密码存储始终用make_password和check_password默认 PBKDF2 算法。安全配置启用 CSRF、HTTPS设置SECURE_COOKIE。性能优化JWT 避免存敏感数据Session 用 Redis 缓存。第三方集成用django-allauth或django-oauth-toolkit支持社交登录/OAuth。常见坑未启用中间件导致request.user为 AnonymousUser自定义模型未设置USERNAME_FIELD。Django 的鉴权系统强大且灵活结合 DRF 可轻松构建企业级应用。掌握这些你就能在 Python Web 开发中游刃有余如果想看完整项目代码、OAuth 示例或特定版本差异随时告诉我

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询