基于类的意见

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. 网易云音乐JS逆向解析歌曲链接

    Request URL:   https://music.163.com/weapi/song/enhance/player/url?csrf_token= FormData : params: BV ...

  2. CF1465-D. Grime Zoo

    CF1465-D. Grime Zoo 题意: 一个长度为n,由\(0,1,?\)这三个字符构成的字符串,字符串中\(01\)子串贡献\(x\)值,\(10\)的子串贡献\(y\)值,现在让你把\(? ...

  3. 抓包 127.0.0.1 (loopback) 使用 tcpdump+wireshark

    直接使用 wireshark无法抓取 127.0.0.1环回的数据包,一种解决方法是先传到路由器再返回,但这样可能造成拥塞. Linux 先使用tcpdump抓包并输出为二进制文件,然后wiresha ...

  4. python阿里云api查询域名是否可以注册(CheckDomain)

    import requests from fun import * from urllib import parse url ='http://domain.aliyuncs.com/?' acces ...

  5. openssl的用法

    Openssl详细用法: OpenSSL 是一个开源项目,其组成主要包括一下三个组件: openssl:多用途的命令行工具 libcrypto:加密算法库 libssl:加密模块应用库,实现了ssl及 ...

  6. 如何在手机上实现 H5 页面全屏显示

    如何在手机上实现 H5 页面全屏显示 fullscreen 隐藏头部地址栏 隐藏底部导航栏 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才 ...

  7. Web 实时通信方案 All In One

    Web 实时通信方案 All In One HTTP 轮询, 单向通信,开销大 HTTP 长轮询, 单向通信,开销较小 WebSocket,双向通信,开销小 (TCP 高延迟,保证数据完整性) Ser ...

  8. windows 10 remote desktop

    windows 10 remote desktop https://support.microsoft.com/en-us/help/4028379/windows-10-how-to-use-rem ...

  9. 前端 vs 后端

    前端 vs 后端 前端与后端: 有什么区别? 前端和后端是计算机行业中最常用的两个术语. 在某种程度上,它们成了流行语. 它们决定了您作为软件开发人员所从事的工作类型,所使用的技术以及所获得的收入. ...

  10. GitHub Actions & GitHub Secrets

    GitHub Actions & GitHub Secrets tokens & private variable GitHub Secrets https://github.com/ ...