django rest framework之基于token实现基本用户认证

 

 

class OrderView(APIView):

    ###订单相关业务###

    # 查看订单的所有信息
    def get(self, request, *args, **kwargs):
      
        ret = {'code': 1000, 'msg': None, 'data': None}
        try:
            ret['data'] = ORDER_DICT
        except Exception as e:
            pass
        return JsonResponse(ret)

 

 得到效果如上。

用实现token的认证可以通过django restframework的dispatch的函数进行方法的调用

 

 

用户认证所有代码如下:

from django.shortcuts import render, HttpResponse
from django.http import JsonResponse
from rest_framework.views import APIView
from rest_framework.request import Request
from rest_framework import exceptions   #固定的异常写法
from rest_framework.authentication import BasicAuthentication   #认证类里去找authenticate_header方法
from api import models

# 用户认证
class Authtication(object):
    def authenticate(self, request):
        token = request._request.GET.get('token')
        token_obj = models.UserToken.objects.filter(token=token).first()
        if not token_obj:  # token没给或者数据库查询不到,token提供错了
            raise exceptions.AuthenticationFailed('用户认证失败')  # 触发异常,AuthenticationFailed内部捕捉到这个错误
        # 在rest framework内部会整个两个字段赋值给request,以供后续操作使用
        return (token_obj.user, token_obj)  # 返回两个元组

    def authenticate_header(self, request):
        pass


class OrderView(APIView):
    ###订单相关业务###
    authentication_classes = [Authtication, ]  # 在类里应用上认证规则token

    # 先认证后才能查看订单的所有信息
    def get(self, request, *args, **kwargs):
        # request.user
        # request.auth
        # 验证是否登入成功,直接看返回的token,如果没有带token说明以前没有登入过
        # token = request._request.Get.get('token')
        # if not token:
        #     return HttpResponse('用户未登入')
        # self.dispatch()
        ret = {'code': 1000, 'msg': None, 'data': None}
        try:
            ret['data'] = ORDER_DICT
        except Exception as e:
            pass
        return JsonResponse(ret)


class UserInfoView(APIView):
    authentication_classes = [Authtication, ]  # 在类里应用上认证规则token,即应用类
    
    # 认证后才能查看用户信息
    def get(self, request, *args, **kwargs):
        return HttpResponse('用户信息')

  注意:

 

posted @ 2022-05-30 19:44  费皿啊  阅读(190)  评论(0)    收藏  举报