基于类的意见

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. 解决M1 MacBook无法使用pip安装Numpy

    问题描述 Python官方已发布支持M1 Apple Silicon的版本,但是在使用pip包管理工具安装一些依赖时发生了错误,这里面就包括在科学计算领域常用的numpy.pandas等.目前可以通过 ...

  2. Linux命令之find命令中的-mtime参数

    有关find -mtime的参数解释 mtime参数的理解应该如下: -mtime n 按照文件的更改时间来找文件,n为整数. n表示文件更改时间距离为n天, -n表示文件更改时间距离在n天以内,+n ...

  3. shapefile 输出的地理处理注意事项(转载)

    来源:http://resources.arcgis.com/zh-cn/help/main/10.1/index.html#//005600000013000000 多年来,Esri 为存储地理信息 ...

  4. leetcode 39 dfs leetcode 40 dfs

    leetcode 39 先排序,然后dfs 注意先整全局变量可以减少空间利用 class Solution { vector<vector<int>>ret; vector&l ...

  5. LeetCode6 Z字形排列

    题目描述是从上到下,从左到右Z字形排列. 找规律.这种形式一般都是mod x 余数有规律.然后写的时候围绕x构造,而非判断,代码会简单一些. 设行数为r 先观察r=5的情况 发现第0行的字符原始ind ...

  6. Install wx

    Ubuntu 16.04: 由于是PY交易, 实际上是安装wxPython: pip install -U \ -f https://extras.wxpython.org/wxPython4/ext ...

  7. Pycharm缺少环境变量+无法获取libcudnn.so.6

    在终端输入: echo LD_LIBRARY_PATH, 并将其内容 添加至Pycharm的 run -> Edit configuration -> Environment variab ...

  8. Smashing Conf 2020

    Smashing Conf 2020 https://smashingconf.com/online-workshops/ events https://smashingconf.com/ny-202 ...

  9. 动态规划算法 All In One

    动态规划算法 All In One dynamic programming leetcode https://leetcode.com/tag/dynamic-programming/ https:/ ...

  10. Linux shell create file methods

    Linux shell create file methods touch, cat, echo, EOF touch $ touch file.py $ touch file1.txt file2. ...