中央行政城区不是谁都能进内部办公楼。
Django 自带一整套认证体系:
- 用户
User - 会话
session - 登录登出
- 权限
permission - 用户组
group
先接入官方自带登录视图:
from django.contrib import admin
from django.contrib.auth.views import LoginView, LogoutView
from django.urls import include, path
urlpatterns = [
path("admin/", admin.site.urls),
path("permits/", include("permits.urls")),
path("accounts/login/", LoginView.as_view(), name="login"),
path("accounts/logout/", LogoutView.as_view(), name="logout"),
]给登录成功后的跳转加个配置:
LOGIN_REDIRECT_URL = "permits:index"
LOGOUT_REDIRECT_URL = "login"对需要登录的窗口加门禁:
from django.contrib.auth.decorators import login_required
@login_required
def create(request):
...如果还要更细权限,比如只有审批员能改状态:
from django.contrib.auth.decorators import permission_required
@permission_required("permits.change_permit", raise_exception=True)
def approve(request, pk):
...认证流程本质上是:
用户提交账号密码
│
▼
Django 验证身份
│
▼
服务端建立 session
│
▼
浏览器拿到 sessionid cookie
│
▼
后续请求自动带 cookie
│
▼
request.user 可用你在 View 和 Template 里都能直接用认证结果:
request.user.is_authenticatedrequest.user.username- 模板里根据是否登录显示不同按钮
一个非常重要、且常被晚学到的经验:
如果项目确定要自定义用户模型,尽量在第一次 migrate 之前就定下来。
这是 Django 老工程里最经典的“早知道”问题之一。