zoukankan      html  css  js  c++  java
  • 02_View

    1、View

    1、基于类的视图 Class-based Views

    REST framework提供APIView是Django的View的子类

    发送到View的Request请求:是REST framework的Request类的实例,而不是Django的HttpRequest类的实例
    View返回的Response响应:返回REST framework的Response,而不是Django的HttpRequest

    将请求分派给处理程序方法之前,可以进行如下操作:认证,合适的权限和(或)节流检查

    View视图

    from rest_framework.views import APIView
    from rest_framework.response import Response
    from rest_framework import authentication, permissions
    from django.contrib.auth.models import User
    class ListUser(APIView):
        """
        列出系统中的所用用户的视图
    
        * 需要token认证
        * 只有管理员用户可以访问这个视图
        """
        # authentication_classes = [authentication.TokenAuthentication]   # 需要携带token访问
        permission_classes = [permissions.IsAdminUser]
    
        def get(self, request, format=None):
            """
            Return a list of all users.
            """
            usernames = [user.username for user in User.objects.all()]
            # 方法1:lowb
            # queryset = User.objects.all()
            # usernames = []
            # for user in queryset:
            #     usernames.append(user.username)
            return Response(usernames)

    url

    from django.urls import path
    from .views import ListUser, hello_world, view1, view2
    
    
    urlpatterns = [
        path('user-list', ListUser.as_view()),
    ]

    2、API策略属性

    下面这些属性控制了API视图可拔插的那些方面。

     3、API 策略实例化方法  

    下面这些方法被REST framework用来实例化各种可拔插的API策略。你通常不需要重写这些方法。

    4、API 策略实现方法

    在分派到处理程序方法之前调用以下方法。

     5、dispatch 相关方法

     

    1、.initialize_request(self, request, args, *kwargs)

    # 初始化request请求,返回Request实例

    2、.initial(self, request, args, *kwargs)

    运行在调用方法处理程序之前,运行你需要的任何功能。可以执行权限认证,节流限制,内容协商

    3、.handle_exception(self, exc)

    处理程序方法抛出的任何异常都将传递给此方,通过返回适当的响应,或重新引发错误。

    4、.finalize_response(self, request, response, args, *kwargs)

    确保从处理程序方法返回的任何 Response 对象都被渲染成正确的内容类型

    2、基于函数的视图 (Function Based Views)

    说 [基于类的视图] 永远是最好的解决方案是一个错误

    REST framework 还允许您使用常规的基于函数的视图

    urls

    from django.urls import path
    from .views import ListUser, hello_world, view1, view2
    
    
    urlpatterns = [
        path('user-list', ListUser.as_view()),
    
        # @api_view
        path('hello-world', hello_world),
        path('view1', view1),   # 节流
        path('view2', view2),   # schema api概要描述
    ]

    1、@api_view()

    语法:@api_view(http_method_names=['GET'])

    from rest_framework.decorators import api_view
    
    
    @api_view(http_method_names=['GET', 'POST'])
    def hello_world(request):
        if request.method == 'POST':
            return Response({"message": "Got some data!", "data": request.data})
        return Response({"message": "hello world!"})

    2、API 策略装饰器 (API policy decorators)

    REST framework 提供了一系列可以添加到视图中的附加装饰器

    例如,要创建一个使用限流来确保它每天只能由特定用户调用一次的视图,请使用 @throttle_classes 装饰器,传递一个限流类列表:

    from rest_framework.decorators import api_view, throttle_classes
    from rest_framework.throttling import UserRateThrottle
    
    
    class OncePerDayUserThrottle(UserRateThrottle):  # 节流:一天一次访问器
        rate = "1/day"
    
    
    @api_view(['GET'])
    @throttle_classes([OncePerDayUserThrottle])
    def view1(request):
        return Response({"message": "hello for today!see you tomorrow"})

    可用的装饰者有:

    • @renderer_classes(...)
    • @parser_classes(...)
    • @authentication_classes(...)
    • @throttle_classes(...)
    • @permission_classes(...)

     3、视图模式装饰器 (View schema decorator)

    要覆盖基于函数的视图的默认模式生成,您可以使用 @schema 装饰器

    ###
    # 视图模式装饰器 (View schema decorator)
    ###
    
    from rest_framework.schemas import AutoSchema
    from rest_framework.decorators import schema
    
    
    class CustomAutoSchema(AutoSchema):
        def get_link(self, path, mehod, base_url):
            # 这里重写视图,描述该API的概要
            pass
    
    
    @api_view(http_method_names=['GET'])
    @schema(CustomAutoSchema)
    # @schema(None)
    def view2(request):
        return Response({"message": "hello for today! see you tomorrow!"})

    3、总结

    1、APIView源码

  • 相关阅读:
    蓝屏代码stop:0X000000EA(0X85E286B8,0X8635F210,0XF7A53CBC,0X00000001)
    SAP HR 复制PA30的人员
    ABAP OO 开发语法整理
    ABAP制作密码输入框
    Basis 基础
    Excel 文件下载
    SAP 锁机制
    SE16传输配置表数据
    FastAdmin bootstrap-table 分页手动输入跳转
    FastAdmin 的 url 有一个 ref=addtabs 是怎么添加的?
  • 原文地址:https://www.cnblogs.com/venicid/p/12035522.html
Copyright © 2011-2022 走看看