一、开场白:为什么你的视图需要“看门大爷”?
兄弟们,姐妹们,咱们写个Web应用,最怕啥?怕Bug?怕性能差?不,最怕的是安全漏洞!而你应用里最大的安全漏洞之一,可能就是——没给视图加权限。
这啥概念呢?就好比你费尽心思装修了个豪华会所(你的网站),里面有VIP包间(管理后台)、有会员专区(用户中心)。结果你呢,忘了请保安,也没装门禁,大门敞开,谁都能进来溜达。路人甲不仅能在大厅(公开页面)晃悠,还能一脚踹开你VIP包间的门,把你存的好酒(数据库数据)全给喝了。
吓人不?太吓人了!
别怕!Django早就给你准备好了全套“安保系统”,核心就是认证(Authentication) 和权限(Permission)。今天,咱们不聊虚的,就干一件事:给你那些“娇贵”的视图函数和视图类,穿上权限的铠甲!
二、Django权限系统:你的“安保部门”编制
在请出我们的“看门大爷”(视图装饰器)和“门禁卡”(权限检查)之前,得先了解一下Django这个“公司”的安保部门是怎么编制的。
- 认证 (Authentication): 回答“你是谁?” 这个问题。就是检查用户提供的凭证(比如用户名密码)是否正确,确认他的身份。通过认证的用户,Django会给他一个
User对象的实例。 - 权限 (Permission): 回答“你能干什么?” 这个问题。一个用户认证通过后,不代表他什么都能干。权限就是用来标记一个用户(或用户组)是否能执行某种操作。
Django的权限系统是基于模型的。什么意思?当你用python manage.py makemigrations和migrate时,Django会自动为你的每个模型创建四种默认权限:add_模型名, change_模型名, delete_模型名, 和 view_模型名。
比如,你有个Article模型,Django就会自动生成:
blog.add_article(添加文章)blog.change_article(修改文章)blog.delete_article(删除文章)blog.view_article(查看文章)
这些权限就像是一张张“操作许可证”,存放在数据库里。你可以通过Admin后台,给不同的用户或用户组分配这些许可证。
准备工作: 确保你的settings.py里已经启用了Django的认证和权限中间件:
# settings.py
INSTALLED_APPS = [
# ...
'django.contrib.auth', # 核心认证框架
'django.contrib.contenttypes', # 权限系统依赖它
# ...
]
MIDDLEWARE = [
# ...
'django.contrib.sessions.middleware.SessionMiddleware', # 管理会话
'django.contrib.auth.middleware.AuthenticationMiddleware', # 关联用户与请求
# ...
]
好了,安保部门准备就绪,现在该给我们的“房间”(视图)上锁了!
三、实战演练:给你的视图穿上“防弹衣”
1. 第一道锁:@login_required —— “游客止步”
这是最简单、最常用的一把锁。它的要求就一点:是登

最低0.47元/天 解锁文章
846

被折叠的 条评论
为什么被折叠?



