源码流程
![8491383-a777d8da04e4dbb8.png](https://i-blog.csdnimg.cn/blog_migrate/32e923323545c426202c87d31fa9e967.webp?x-image-process=image/format,png)
image.png
- 首先执行dispatch方法
- 重新封装Request
- initial(request)方法里面有各种封装函数
- 其中perform_authentication(request)是认证的函数
- 返回一个request.user
- def _authenticate():循环所有的authentication对象,执行authenticate方法
- Authtication 自定义认证类
def authenticate():
自定义认证
-报错
-返回元组(request.user, request.auth)
使用
- 定义一个认证类,实现authenticate方法
from rest_framework.authentication import BaseAuthentication
class FirstAuthtication(BaseAuthentication):
def authenticate(self, request, *args, **kwargs):
pass
def authenticate_header(self, request):
pass
- 返回值
- 返回None, 执行下一个认证
- 有返回值,返回一个元组,第一个参数存在request.user里,第二个在request.auth里
- 异常
from rest_framework import exceptions
raise exceptions.AuthenticationFailed('用户认证失败')
- 局部使用
相关业务
from rest_framework.views import APIView
class UserInfoView(APIView):
authentication_classes = []
def get(self, request, *args, **kwargs):
print(request.user)
return HttpResponse('用户相关信息')
- 全局使用
REST_FRAMEWORK = {
# 'DEFAULT_AUTHENTICATION_CLASSES': ['apps.api.utils.auth.FirstAuthtication', 'apps.api.utils.auth.Authtication'],
'DEFAULT_AUTHENTICATION_CLASSES': ['apps.api.utils.auth.Authtication'],
'UNAUTHENTICATED_USER': None,
'UNAUTHENTICATED_TOKEN': None,
}