基于类的意见

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. ES中文分词器安装以及自定义配置

    之前我们创建索引,查询数据,都是使用的默认的分词器,分词效果不太理想,会把text的字段分成一个一个汉字,然后搜索的时候也会把搜索的句子进行分词,所以这里就需要更加智能的分词器IK分词器了. ik分词 ...

  2. 大数据开发-Spark-初识Spark-Graph && 快速入门

    1.Spark Graph简介 GraphX 是 Spark 一个组件,专门用来表示图以及进行图的并行计算.GraphX 通过重新定义了图的抽象概念来拓展了 RDD: 定向多图,其属性附加到每个顶点和 ...

  3. Redis的主从架构+哨兵模式

    Redis主从架构 redis主从架构搭建,配置从节点步骤: 1.复制一份redis.conf文件的目录 cd /usr/local/java cp -a redis redis_6380 2.将相关 ...

  4. Cobbler服务引导第三方PE系统

    通过Cobbler服务引导第三方PE系统 1.上传第三方ios到/root/Ushendu_win10.iso并增加菜单项 cobbler distro add --name=Ushendu_win1 ...

  5. Kerberos原理经典对话

    这是MIT(Massachusetts Institute of Technology)为了帮助人们理解Kerberos的原理而写的一篇对话集.里面有两个虚构的人物:Athena和Euripides, ...

  6. OPENSOURCE - libcurl

    本文仅做备份存档,原文地址如下,请点链接进入 https://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html https://www.c ...

  7. Jenkins 安装与部署详细教程

    一.概述 Jenkins 的前身是 Hudson 是一个可扩展的持续集成引擎.Jenkins 是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件.Jenkins 支持各 ...

  8. docker的网络-单主机(三种原生网络)none、host、bridge

    docker的网络分为:单主机.跨主机 这篇先说:单主机 我们先说一下docker的原生网络模式 网络模式 简介 优点 使用场景 none 空网络,没有网络 此网络与外界隔离,安全度非常高 适合公司内 ...

  9. struct 和 class的区别

    struct和class如果按照在C的时代,还是有很大差别的. c中struct的定义如下: struct  结构名 {   成员表 }: 因为struct是一种数据类型,那么就肯定不能定义函数,所以 ...

  10. HDU 3341 Lost's revenge (AC自动机 + DP + 变进制/hash)题解

    题意:给你些分数串,给你一个主串,主串每出现一个分数串加一分,要你重新排列主串,最多几分 思路:显然这里开$40^4$去状压内存不够.但是我们自己想想会发现根本不用开那么大,因为很多状态是废状压,不是 ...