认证组件
认证有什么用:
一些接口,想限制登录的后才能访问,没登录不能访问
做登录认证,限制如果没登录,不允许访问该接口
drf中认证类如何使用:
1、写一个类,继承BaseAuthentication
2、类中重写:authenticate方法
3、在authenticate完成登录认证,如果登录了,返回两个值,第一个值是request.user,如果能拿的出就是登录了,拿不出就是未登录,抛异常
4、在视图类中配置使用
class BookView(ViewSet):
authentication_classes = [LoginAuth]
认证小结:
1、认证类的使用:
配置在视图类上:局部使用
配置文件中配置:全局使用——所有接口必须登录后才能使用(值得注意的是,这里的全局使用也包含了登录本身,所以要对登录进行局部禁用)
全局使用(配置文件中): REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ 'app01.auth.LoginAuth' ], }
局部禁用:
class UserView(ViewSet): authentication_classes = []
2、写的认证类:要重写authenticate方法,必须返回两个参数:
当前登录用户返回:第一个参数是user_token.user,第二个参数是用户的 token
在视图类中显示的是:request.user(认证类的第一个参数),request.auth认证类返回的第二个参数
3、如果认证失败就抛异常
AuthenticationFailed,会被def捕获处理,不会报错到前端
4、前端传入的token,如何取:
后端定的,我们项目是从请求地址中取,还可以从请求头或者请求体中取
5、update_or_create方法:
update_or_create(self, defaults=None, **kwargs)
如果defaults有值就是更新
如果defaults没有值就是新增