应老板需求,需要为公司软件,做一个宣传视频,普通发不飘准的我,就想到了这个方法为视频配音( Ĭ ^ Ĭ )
(只看调用API方法的小伙伴请忽视前面,直接往后看)
普通apiview登录认证:
from rest_framework.authentication import BasicAuthentication
# 在view中添加Authtication类 继承BasicAuthentication类
# 继承更标准,不继承也没影响最终都会走到APIView
class Authtication(BasicAuthentication):
def authenticate(self, request):
token = request._request.GET.get('token')
print(token)
token_obj = models.UserToken.objects.filter(token=token).first()
if not token_obj:
raise exceptions.AuthenticationFailed('未登录,请登录')
# 在rest framework内部会将这两个字段赋值给request 以供后续操作使用request.user == token_obj.user, request.auth == token_obj
return (token_obj.user, token_obj)
def authenticate_header(self, request): # 响应头,可以自己定义
pass
class OrderView(APIView):
# Django rest framework 用于判断是否登录
authentication_classes = [Authtication,] # 为自定义视图添加自定义用户认证规则类,可以添加多个自定义规则类,在源码中会for 循环取值
def get(self,request):
这样OK但是有很多很多的类需要给他们定义判定规则怎么办,这样既麻烦也会出现代码大量冗余,这就需要全局配置
全局配置:
# mkdir 文件夹 创建文件夹
# vim 文件名 有则打开文件,反之创建
from rest_framework import exceptions
from LoginRegister import models
from rest_framework.authentication import BasicAuthentication
class Authtication(BasicAuthentication):
def authenticate(self, request):
token = request._request.GET.get('token')
token_obj = models.UserToken.objects.filter(token=token).first()
if not token_obj:
raise e