rest framework Views
基于类的意见
Django的基于类的意见是从旧式的观点颇受欢迎。
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框架的关系APIView,GenericAPIView各种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的Http404和PermissionDenied异常,并返回相应的错误信息。
如果您需要自定义错误响应您的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的更多相关文章
- django rest framework 入门
django rest framework 入门1-序列化 Serialization 分类: Python 2013-01-22 22:24 11528人阅读 评论(0) 收藏 举报 djangop ...
- YII Framework学习教程-YII的异常处理
异常无处不在,作为程序员,活着就是为了创造这些异常,然后修复这些异常而存在的.YII框架封装了PHP的异常,让异常处理起来更简单. 使用 YII处理错误和异常的配置方法: 你可以在入口文件中定义YII ...
- Laravel + Serverless Framework 快速创建 CMS 内容管理系统
今天,为大家带来一篇 Laravel + Serverless Framework 的综合实战,里面信息量有点多,大家仔细看哦- 首先,我来介绍下主要的本地环境吧: Git:不多说,只要会敲代码就应该 ...
- 关于laravel基础知识
laravel任务管理知识点 1.配置数据库环境 首先要找到congif/app.php,在这里会发现一些全局的系统设置,包括语言,时区等. 重要的是会发现前几个数组都使用了env()这个函数,这个时 ...
- 最为简易的yii 教程(一)
了解目录的框架结构 framework主要有 base 框架核心组件 caching 缓存组件 db 数据库组件 gii ...
- Hadoop官方文档翻译——MapReduce Tutorial
MapReduce Tutorial(个人指导) Purpose(目的) Prerequisites(必备条件) Overview(综述) Inputs and Outputs(输入输出) MapRe ...
- MonoRail MVC应用(2)-构建多层结构的应用程序
习惯了分层结构的.NET开发了,当然也是分层有优势,所以在使用MonoRail进行网站构建时,首先考虑到的问题就是MonoRail如何应对分层的结构.问题1:MonoRail在WEB层没有根目录,必须 ...
- MonoRail学习-入门实例篇
1.到官方网站下载安装文件,地址如下: http://www.castleproject.org/index.php/Castle:Download目前最新版本Beta5(您也可以不需要下载,直接使用 ...
- yii快速入门与参考
Yii 权威指南 http://www.yiichina.com/guide/ http://www.yiiframework.com/doc/guide/1.1/zh_cn/ Ⅰ.基本概念一.入口文 ...
随机推荐
- ES中文分词器安装以及自定义配置
之前我们创建索引,查询数据,都是使用的默认的分词器,分词效果不太理想,会把text的字段分成一个一个汉字,然后搜索的时候也会把搜索的句子进行分词,所以这里就需要更加智能的分词器IK分词器了. ik分词 ...
- 大数据开发-Spark-初识Spark-Graph && 快速入门
1.Spark Graph简介 GraphX 是 Spark 一个组件,专门用来表示图以及进行图的并行计算.GraphX 通过重新定义了图的抽象概念来拓展了 RDD: 定向多图,其属性附加到每个顶点和 ...
- Redis的主从架构+哨兵模式
Redis主从架构 redis主从架构搭建,配置从节点步骤: 1.复制一份redis.conf文件的目录 cd /usr/local/java cp -a redis redis_6380 2.将相关 ...
- Cobbler服务引导第三方PE系统
通过Cobbler服务引导第三方PE系统 1.上传第三方ios到/root/Ushendu_win10.iso并增加菜单项 cobbler distro add --name=Ushendu_win1 ...
- Kerberos原理经典对话
这是MIT(Massachusetts Institute of Technology)为了帮助人们理解Kerberos的原理而写的一篇对话集.里面有两个虚构的人物:Athena和Euripides, ...
- OPENSOURCE - libcurl
本文仅做备份存档,原文地址如下,请点链接进入 https://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html https://www.c ...
- Jenkins 安装与部署详细教程
一.概述 Jenkins 的前身是 Hudson 是一个可扩展的持续集成引擎.Jenkins 是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件.Jenkins 支持各 ...
- docker的网络-单主机(三种原生网络)none、host、bridge
docker的网络分为:单主机.跨主机 这篇先说:单主机 我们先说一下docker的原生网络模式 网络模式 简介 优点 使用场景 none 空网络,没有网络 此网络与外界隔离,安全度非常高 适合公司内 ...
- struct 和 class的区别
struct和class如果按照在C的时代,还是有很大差别的. c中struct的定义如下: struct 结构名 { 成员表 }: 因为struct是一种数据类型,那么就肯定不能定义函数,所以 ...
- HDU 3341 Lost's revenge (AC自动机 + DP + 变进制/hash)题解
题意:给你些分数串,给你一个主串,主串每出现一个分数串加一分,要你重新排列主串,最多几分 思路:显然这里开$40^4$去状压内存不够.但是我们自己想想会发现根本不用开那么大,因为很多状态是废状压,不是 ...