一.昨日回顾
1 认证:判断用户是否登录
2 登录功能:(一个达标拆成一对一的两个小表,其实叫垂直分表)
-update_or_create()
3 认证类
-写一个类,继承BaseAuthentication
-重写authenticate
-在authenticate内部做认证(request对象)
-request中取出token
-认证通过,返回None,或者有两个元素的元组(user,token)
-认证失败:AuthenticationFailed
4 使用认证类
-局部使用
-视图类上
-全局使用
-配置文件中
5 配置信息的查找顺序:先从视图类中找(局部配置)--->用户项目的配置文件(全局配置)--->drf默认的配置文件(不配置)
6 认证源码分析
-所有drf的请求,都会执行APIView的dispatch
-Request对象中有个authenticators属性,它是我们在视图类中配置的认证类的对象,放到了列表中
-只要通过了认证
request.user
7 权限的使用
-写一个类,继承BasePermission
-重写has_permission
-在has_permission内部做权限控制(request对象)
-request中取出token
-认证通过,返回True
-认证失败,返回False
8 源码分析
-APIView的dispatch--->APIView的initial--->APIView的check_permission(request)
for permission in self.get_permissions():
if not permission.has_permission(request, self):
self.permission_denied(
request,
message=getattr(permission, 'message', None),
code=getattr(permission, 'code', None)
)
9 错误信息的中文显示
在显示类中加一个 message=字符串
二.今日内容
1.权限源码分析
8 源码分析
-APIView的dispatch--->APIView的initial--->APIView的check_permission(request)
for permission in self.get_permissions():
if not permission.has_permission(request, self):
self.permission_denied(
request,
message=getattr(permission, 'message', None),
code=getattr(permission, 'code', None)
)
9 错误信息的中文显示
在显示类中加一个 message=字符串
2.模型层choice字段使用(重点)
1 模型表:Student表,写接口应该选择继承哪个视图类
2 推荐使用自动生成路由的方式(继承ViewSetMixin及它的子类)
3 choice的使用
-在模型类中使用
sex=models.SmallIntegerField(choices=(1,'男'),(2,'女'),(3,'未知')),default=1)
-在视图类中,在序列化类中
-get_字段名_display()的方法,该方法获得choice字段对应的数据
代码演示
models.py/urls.py/serializer.py
'''===== models.py ====='''
class Student(models.Model):
choice_sex=((1,&#