drf 简单认证

认证类(不能写在视图里)

rom rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed

class MyAuthentication(BaseAuthentication):
    def authenticate(self, request):
        '''
        去做用户认证
        1.读取请求传递的token
        2.校验token合法性
        3.返回值
            3.1元组 (request.user,request.auth) 认证成功
            3.2抛出异常 认证失败
            3.3返回None 多个认证类[认证类1,认证类2,认证类3,认证类4] 匿名

        '''
        token = request.query_params.get('token')
        if token:
            return 'szw', token
        # raise AuthenticationFailed('认证失败')
        raise AuthenticationFailed({'code': 999, 'error': '认证失败'})

配置项settings

REST_FRAMEWORK = {
# 认证类
    "DEFAULT_AUTHENTICATION_CLASSES": ['ext.auth.MyAuthentication']
}

视图类

# 无需登录
class LoginView(APIView):
    # 优先读取配置项,在读取这里,后读取覆盖先读取
    authentication_classes = []
    def get(self, request):
        print(request.user, request.auth)
        return Response({'status': 'LoginView'})


# 需登录
class OrderView(APIView):
    def get(self, request):
        print(request.user, request.auth)
        return Response({'status': 'OrderView'})


# 需登录
class UserView(APIView):
    def get(self, request):
        return Response({'status': 'UserView'})

image
image
image

posted @ 2022-09-30 14:34  Sherwin_szw  阅读(25)  评论(0编辑  收藏  举报