zoukankan      html  css  js  c++  java
  • rest framework Views

    基于类的意见

    Django的基于类的意见是从旧式的观点颇受欢迎。

    - Reinout面包车里斯

    REST框架提供了一个APIView类,它的子类Django的View类。

    APIView类是从正规不同View类别在以下几个方面:

    • 传递给处理方法的要求将是REST框架的Request情况下,不Django的HttpRequest实例。
    • 处理方法可能返回REST架构的Response,而不是Django的,HttpResponse。该视图将管理内容的谈判和制定的响应正确的渲染。
    • 任何APIException异常都会被捕获并介导到适当的响应。
    • 传入请求进行认证和相应的权限和/或油门检查将调度请求发送到处理程序方法之前运行。

    使用APIView类是几乎一样使用普通View类,像往常一样,进入的请求被分发到适当的处理程序方法,例如.get().post()。此外,一些属性可能对控制API政策的各个方面的类进行设置。

    例如:

    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 ListUsers(APIView):
        """
        View to list all users in the system.
    
        * Requires token authentication.
        * Only admin users are able to access this view.
        """
        authentication_classes = [authentication.TokenAuthentication]
        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()]
            return Response(usernames)
    

    :完整的方法,属性,并与Django的REST框架的关系APIViewGenericAPIView各种Mixins,并且Viewsets可以初步复杂。在这里除了文档中,优等Django的REST框架资源提供了一个可浏览参考,以饱满的方法和属性,为每个Django的REST框架的基于类的意见。


    API策略属性

    下面的属性控制的API意见可插拔方面。

    .renderer_classes

    .parser_classes

    .authentication_classes

    .throttle_classes

    .permission_classes

    .content_negotiation_class

    API政策实例方法

    下面的方法是使用REST框架实例的各种可插拔的API政策。你通常不会需要重写这些方法。

    .get_renderers(个体经营)

    .get_parsers(个体经营)

    .get_authenticators(个体经营)

    .get_throttles(个体经营)

    .get_permissions(个体经营)

    .get_content_negotiator(个体经营)

    .get_exception_handler(个体经营)

    API政策的实施方法

    下面的方法分派给处理方法之前被调用。

    .check_permissions(个体,请求)

    .check_throttles(个体,请求)

    .perform_content_negotiation(个体,请求,力=假)

    调度方法

    下面的方法是通过该视图的直接调用.dispatch()方法。这些执行需要之前或调用处理方法,如之后发生的任何动作.get().post()put()patch().delete()

    .initial(个体,请求,*指定参数时,** kwargs)

    执行该处理方法被调用之前进行必要的任何行动。该方法用于执行权限和节流,并执行内容协商。

    你通常不会需要重写此方法。

    .handle_exception(个体,EXC)

    通过处理方法抛出的任何异常将被传递给这个方法,它要么返回一个Response实例,或重新引发异常。

    默认实现手柄的任何子类rest_framework.exceptions.APIException,以及Django的Http404PermissionDenied异常,并返回相应的错误信息。

    如果您需要自定义错误响应您的API返回,你应该继承这个方法。

    .initialize_request(个体,请求,*指定参数时,** kwargs)

    确保所传递给处理程序方法请求对象是一个实例Request,而不是通常的Django HttpRequest

    你通常不会需要重写此方法。

    .finalize_response(个体,请求,响应,*指定参数时,** kwargs)

    确保任何Response从处理程序方法返回对象将被渲染成正确的内容类型,如由内容协商确定。

    你通常不会需要重写此方法。


    功能为本次

    话说[即基于类的意见]总是出色的解决方案是一个错误。

    - 尼克·科格伦

    REST框架还可以让你的工作与基于定时功能的看法。它提供了一套简单的装饰是包住功能为本次,以确保他们收到的一个实例Request(而不是通常的Django HttpRequest),并允许他们返回Response(而不是一个Django HttpResponse),并允许您配置请求的处理。

    @api_view()

    签名: @api_view(http_method_names=['GET'])

    这个功能的核心是api_view装饰,它采用的方法,你的观点应该做出响应的HTTP列表。例如,这是你会怎么写,只是手动返回一些数据,一个很简单的观点:

    from rest_framework.decorators import api_view
    
    @api_view()
    def hello_world(request):
        return Response({"message": "Hello, world!"})
    

    这种观点将使用默认的渲染器,解析器,认证类等,在指定的设置

    默认情况下,只有GET方法将被接受。其他方法将与“405不允许的方法”作出回应。要改变这种现象,指定哪些方法视图允许,就像这样:

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

    API政策装饰

    要覆盖默认设置,REST框架提供了一套可以添加到您的看法更多的装饰。这些一定要来(下)的@api_view装饰。例如,要创建一个使用视图油门,以确保它只能通过特定的用户被称为每天一次,使用的@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 view(request):
        return Response({"message": "Hello for today! See you tomorrow!"})
    

    这些装饰器对应于上设置的属性APIView的子类,如上所述。

    可用的装饰是:

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

    所有这些装饰的需要必须是类的列表或元组的一个参数。

    查看模式装饰

    要覆盖缺省模式生成的功能为本次你可以使用@schema装饰。这必须来(下)的@api_view 装饰。例如:

    from rest_framework.decorators import api_view, schema
    from rest_framework.schemas import AutoSchema
    
    class CustomAutoSchema(AutoSchema):
        def get_link(self, path, method, base_url):
            # override view introspection here...
    
    @api_view(['GET'])
    @schema(CustomAutoSchema())
    def view(request):
        return Response({"message": "Hello for today! See you tomorrow!"})
    

    这个装饰采用单个AutoSchema实例,一个AutoSchema子类的实例或ManualSchema作为中所述的实例架构文档。您可以传递None,以排除架构生成视图。

    @api_view(['GET'])
    @schema(None)
    def view(request):
        return Response({"message": "Will not appear in schema!"})
    
  • 相关阅读:
    hibernate 使用hibernate 的注解做多对一双向映射
    JBPM学习笔记
    在测试Hibernate的一对多双向关联映射时
    js定时三秒后自动跳转页面
    struts2 的验证框架
    hibernate 双向一多对关联 删除一端时级联删除多端
    JPA 一些常用的东西
    Python 基础语法
    设计一个带有getmin功能的栈,保证时间复杂度在O(1)
    数据结构栈模拟队列
  • 原文地址:https://www.cnblogs.com/pyliuwei/p/12468684.html
Copyright © 2011-2022 走看看