zoukankan      html  css  js  c++  java
  • DRF

    在 app 目录下创建 utils 目录,并创建 auth.py

    auth.py:

    from rest_framework.authentication import BaseAuthentication
    
    
    # 用于全局认证
    class GlobalAuthentication(BaseAuthentication):
        def authenticate(self, request):
            return ("Admin", "admin")
    
        def authenticate_header(self, request):
            pass
    
    
    # 用于局部认证
    class MyAuthentication(BaseAuthentication):
        def authenticate(self, request):
            return ("Test", "test")
    
        def authenticate_header(self, request):
            pass

    在 settings.py 中设置全局认证:

    REST_FRAMEWORK = {
        # 全局使用的认证类
        "DEFAULT_AUTHENTICATION_CLASSES": ["drf.utils.auth.GlobalAuthentication", ],
    }
    

    这里用的是认证类的路径

    views.py:

    from django.http import JsonResponse
    from rest_framework.views import APIView
    
    
    # 订单信息
    ORDER_DICT = {
        1: {
            "commodity": "Phone",
            "price": 3600,
            "date": "2021-01-03",
        },
        2: {
            "commodity": "Computer",
            "price": 6700,
            "date": "2021-01-05",
        },
    }
    
    
    class OrderView(APIView):
        """
        查看订单
        """
    
        def get(self, request, *args, **kwargs):
            print(request.user)
            print(request.auth)
            response = {"code": 1000, "msg": None, "data": None}
            try:
                response["data"] = ORDER_DICT
            except Exception as e:
                pass
            return JsonResponse(response)
    

    运行结果

    打印的内容:

    说明现在用的是全局认证类 GlobalAuthentication

    要是不想用全局认证,而想用局部认证,则可以用 authentication_classes 进行覆盖

    views.py:

    from django.http import JsonResponse
    from rest_framework.views import APIView
    from drf.utils.auth import MyAuthentication
    
    
    ORDER_DICT = {
        1: {
            "commodity": "Phone",
            "price": 3600,
            "date": "2021-01-03",
        },
        2: {
            "commodity": "Computer",
            "price": 6700,
            "date": "2021-01-05",
        },
    }
    
    
    class OrderView(APIView):
        """
        查看订单
        """
        # 设置局部认证类,覆盖全局认证类
        authentication_classes = [MyAuthentication, ]
    
        def get(self, request, *args, **kwargs):
            print(request.user)
            print(request.auth)
            response = {"code": 1000, "msg": None, "data": None}
            try:
                response["data"] = ORDER_DICT
            except Exception as e:
                pass
            return JsonResponse(response)
    

    打印结果:

    如果既不想用全局认证,也不想用局部认证,则可以使用 authentication_classes = [] 来进行置空

  • 相关阅读:
    OnGUI 音频
    Java 8 的一些新特性
    获取文件编码格式
    js 常用 正则
    C#中这个算是什么
    数据的批量增加
    Ehcache的配置(自学,有问题请指出)
    Linux 下配置和使用java、Tomcat
    StringBuffer和StringBuildr的区别
    Oracle中复制一张表的结构,用sql语句复制一张表结构
  • 原文地址:https://www.cnblogs.com/sch01ar/p/14285216.html
Copyright © 2011-2022 走看看