Django进阶篇 Rest framework (八)
一、权限实例
① 目录结构
为了更好的管理各个功能组件,在 django rest framework 认证中,可以将认证类单独的拿出来,放在其它目录下,然后导入到 views.py 文件中,在权限环节也可以这么做。
在 api 这个 app 下创建一个 utils 包专门用来存放相关的组件。
② 为模型类添加认证字段
在 models.py 中定义了两个模型类,分别是
在 UserInfo 中通过为用户添加一个 user_type 字段来保证用户的身份,是普通用户,VIP 还是 SVIP,这样就可以通过用户的身份验证不同的权限。如果想要定义一个视图类,这个类中的逻辑只有超级用户才能访问。
③ 具体权限认证
可以在 utils 的 permissions.py 文件中添加
这里的 message 表示如果不通过权限的时候,错误提示信息。
这个权限类表示当用户为 SVIP 时不可通过。
这里只是判断用户的 USER_TYPE 的字段,判断用户是否有权限,也可以添加其它的逻辑进行判断。
④ 全局配置
在上一节的 Django进阶篇 Rest framework (七) 的认证中,将认证类放到了 settings.py 文件中,这样会作用到视图中的每个视图类,如果视图类想要自己进行认证,只需要重写 authentication_classes 即可,那么对于权限来说,也可以这么做。
表示每一个视图类(只要不重写 permission_classes 属性),都需要 SVIP 的用户才能访问。
⑤ 视图
在视图 view.py 中定义一个用户详情类 UserInfoView 作为测试,这里的视图和上一节的 views.py 文件是相接的。
续
这里的 UserInfoView 重写了 permission_classes 属性,则不会再使用 settings.py 中关于认证类的配置。表示只有 SVIP 才能访问这个类的内部。
⑥ 路由分发
在 url.py 中设置路由分发
⑦ 请求测试
在 Postman 或者浏览器发送请求,由于在 settings.py 中配置了
会对请求进行认证,所以要带这用户的 token 才能通过,进入到权限组件。