基于类的意见

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!"})

rest framework Views的更多相关文章

  1. django rest framework 入门

    django rest framework 入门1-序列化 Serialization 分类: Python 2013-01-22 22:24 11528人阅读 评论(0) 收藏 举报 djangop ...

  2. YII Framework学习教程-YII的异常处理

    异常无处不在,作为程序员,活着就是为了创造这些异常,然后修复这些异常而存在的.YII框架封装了PHP的异常,让异常处理起来更简单. 使用 YII处理错误和异常的配置方法: 你可以在入口文件中定义YII ...

  3. Laravel + Serverless Framework 快速创建 CMS 内容管理系统

    今天,为大家带来一篇 Laravel + Serverless Framework 的综合实战,里面信息量有点多,大家仔细看哦- 首先,我来介绍下主要的本地环境吧: Git:不多说,只要会敲代码就应该 ...

  4. 关于laravel基础知识

    laravel任务管理知识点 1.配置数据库环境 首先要找到congif/app.php,在这里会发现一些全局的系统设置,包括语言,时区等. 重要的是会发现前几个数组都使用了env()这个函数,这个时 ...

  5. 最为简易的yii 教程(一)

    了解目录的框架结构 framework主要有 base          框架核心组件 caching        缓存组件 db                数据库组件 gii          ...

  6. Hadoop官方文档翻译——MapReduce Tutorial

    MapReduce Tutorial(个人指导) Purpose(目的) Prerequisites(必备条件) Overview(综述) Inputs and Outputs(输入输出) MapRe ...

  7. MonoRail MVC应用(2)-构建多层结构的应用程序

    习惯了分层结构的.NET开发了,当然也是分层有优势,所以在使用MonoRail进行网站构建时,首先考虑到的问题就是MonoRail如何应对分层的结构.问题1:MonoRail在WEB层没有根目录,必须 ...

  8. MonoRail学习-入门实例篇

    1.到官方网站下载安装文件,地址如下: http://www.castleproject.org/index.php/Castle:Download目前最新版本Beta5(您也可以不需要下载,直接使用 ...

  9. yii快速入门与参考

    Yii 权威指南 http://www.yiichina.com/guide/ http://www.yiiframework.com/doc/guide/1.1/zh_cn/ Ⅰ.基本概念一.入口文 ...

随机推荐

  1. Codeforces Round #527 (Div. 3) C. Prefixes and Suffixes (思维,字符串)

    题意:给你某个字符串的\(n-1\)个前缀和\(n-1\)个后缀,保证每个所给的前缀后缀长度从\([1,n-1]\)都有,问你所给的子串是前缀还是后缀. 题解:这题最关键的是那两个长度为\(n-1\) ...

  2. Docker架构分解

    Docker总架构分解Docker对使用者来讲是一个C/S模式的架构,而Docker的后端是一个非常松耦合的架构,模块各司其职,并有机组合,支撑Docker的运行. 用户是使用Docker Clien ...

  3. Chapter Zero 0.2.2 内存

    目录 内存 内存的多通道设计 DRAM 和 SRAM 只读存储器(ROM) RAM.ROM以及硬盘的区别(转自百度) 内存 CPU的数据都是来自主存储器(main memory),个人计算机的主寄存器 ...

  4. 苹果证书p12和描述文件的创建方法

    在2020年之前,我们在使用香蕉云编创建苹果证书的时候,只需要注册苹果开发者账号,但不需要缴费成为开发者. 在2020年之后,需要先缴费成为苹果开发者. 假如你还没有注册苹果开发者账号,可以先参考下下 ...

  5. IFIX 目录结构

    iFIX使用了许多目录存储程序和数据文件.用路径配置对话框来指定iFIX目录的位置和名称.可在SCU工具箱中单击"路径"按钮显示该对话框. 当iFIX安装后它将创建一个目录,该目录 ...

  6. Mac 外接 Dell 4K 显示器字体模糊解决办法

    Mac 外接 Dell 4K 显示器字体模糊解决办法 mac mini mbp 2020 refs https://zhuanlan.zhihu.com/p/52100804 xgqfrms 2012 ...

  7. how to updating Node.js and npm

    how to updating  Node.js and npm 1 Installing Node.js and updating npm How do I update Node.js ? Not ...

  8. css variables & CSS 变量

    css variables & CSS 变量 https://gist.github.com/xgqfrms-GitHub/5d022a13292c615d2730e84d909e1aba c ...

  9. Async Programming All in One

    Async Programming All in One Async & Await Frontend (async () => { const url = "https:// ...

  10. AMP ⚡

    AMP https://amp.dev/zh_cn/ PWA AMP Playground https://playground.amp.dev/?runtime=amp4email <!doc ...