前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >django_restframework模块学习

django_restframework模块学习

作者头像
菲宇
发布2019-09-23 15:46:58
2.1K0
发布2019-09-23 15:46:58
举报
文章被收录于专栏:菲宇菲宇

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/bbwangj/article/details/100973196

一、rest_framework模块

apps authentication认证 authtoken (package) checks compat decorators documentation exceptions异常 fields字段 filters过滤 generics通用视图 management (package) metadata元数据 mixins negotiation内容协商 pagination分页 parsers解析 permissions权限 relations renderers request请求

REST framework 的 Request 类扩展与标准的 HttpRequest,并做了相应的增强,比如更加灵活的请求解析(request parsing)和认证(request authentication)。 1、Request 解析 REST framwork 的 Request 对象提供了灵活的请求解析,允许你使用 JSON data 或 其他 media types 像通常处理表单数据一样处理请求。 .data request.data 返回请求主题的解析内容。这跟标准的 request.POST 和 request.FILES 类似,并且还具有以下特点: 包括所有解析的内容,文件(file) 和 非文件(non-file inputs)。 支持解析 POST 以外的 HTTP method , 比如 PUT, PATCH。 更加灵活,不仅仅支持表单数据,传入同样的 JSON 数据一样可以正确解析,并且不用做额外的处理(意思是前端不管提交的是表单数据,还是 JSON 数据,.data 都能够正确解析)。 .query_params request.query_params 等同于 request.GET,不过其名字更加容易理解。 为了代码更加清晰可读,推荐使用 request.query_params ,而不是 Django 中的 request.GET,这样那够让你的代码更加明显的体现出 ----- 任何 HTTP method 类型都可能包含查询参数(query parameters),而不仅仅只是 'GET' 请求。 .parsers APIView 类或者 @api_view 装饰器将根据视图上设置的 parser_classes 或 settings 文件中的 DEFAULT_PARSER_CLASSES 设置来确保此属性(.parsers)自动设置为 Parser 实例列表。 [<rest_framework.parsers.JSONParser object at 0x7fa850202d68>, <rest_framework.parsers.FormParser object at 0x7fa850202be0>, <rest_framework.parsers.MultiPartParser object at 0x7fa850202860>] 包含三个解析器 JSONParser,FormParser,MultiPartParser。 注意: 如果客户端发送格式错误的内容,则访问 request.data 可能会引发 ParseError 。默认情况下, REST framework 的 APIView 类或者 @api_view 装饰器将捕获错误并返回 400 Bad Request 响应。 如果客户端发送的请求内容无法解析(不同于格式错误),则会引发 UnsupportedMediaType 异常,默认情况下会被捕获并返回 415 Unsupported Media Type 响应。

2、内容协商 该请求公开了一些属性,允许你确定内容协商阶段的结果。这使你可以实施一些行为,例如为不同媒体类型选择不同的序列化方案。 .accepted_renderer 渲染器实例是由内容协商阶段选择的。 .accepted_media_type 表示内容协商阶段接受的 media type 的字符串。 3、认证(Authentication) REST framework 提供了灵活的认证方式: 可以在 API 的不同部分使用不同的认证策略。 支持同时使用多个身份验证策略。 提供与传入请求关联的用户(user)和令牌(token)信息。 .user request.user 通常会返回 django.contrib.auth.models.User 的一个实例,但其行为取决于正在使用的身份验证策略。 如果请求未经身份验证,则 request.user 的默认值是 django.contrib.auth.models.AnonymousUser 的实例(就是匿名用户)。 .auth request.auth 返回任何附加的认证上下文(authentication context)。request.auth 的确切行为取决于正在使用的身份验证策略,但它通常可能是请求经过身份验证的令牌(token)实例。 如果请求未经身份验证,或者没有附加上下文(context),则 request.auth 的默认值为 None。 .authenticators APIView 类或 @api_view 装饰器将确保根据视图上设置的 authentication_classes 或基于 settings 文件中的 DEFAULT_AUTHENTICATORS 设置将此属性(.authenticators)自动设置为 Authentication 实例列表。 注意:调用 .user 或 .auth 属性时可能会引发 WrappedAttributeError 异常。这些错误源于 authenticator 作为一个标准的 AttributeError ,为了防止它们被外部属性访问修改,有必要重新提升为不同的异常类型。Python 无法识别来自 authenticator 的 AttributeError,并会立即假定请求对象没有 .user 或 .auth 属性。authenticator 需要修复。 .authenticators 其实存的就是当前使用的认证器(authenticator)列表,打印出来大概是这样: [<rest_framework.authentication.SessionAuthentication object at 0x7f8ae4528710>, <rest_framework.authentication.BasicAuthentication object at 0x7f8ae45286d8>] 可以看到这里使用的认证器(authenticator)包括 SessionAuthentication 和 BasicAuthentication。 4、浏览器增强 REST framework 支持基于浏览器的 PUT,PATCH,DELETE 表单。 .method request.method 返回请求 HTTP 方法的大写字符串表示形式。如 GET,POST...。 透明地支持基于浏览器的 PUT,PATCH 和 DELETE 表单。 .content_type request.content_type 返回表示 HTTP 请求正文的媒体类型(media type)的字符串对象(比如: text/plain , text/html 等),如果没有提供媒体类型,则返回空字符串。 通常不需要直接访问此属性,一般都依赖与 REST 框架的默认请求解析行为。 不建议使用 request.META.get('HTTP_CONTENT_TYPE') 来获取 content type 。 .stream request.stream 返回一个代表请求主体内容的流。 通常不需要直接访问此属性,一般都依赖与 REST 框架的默认请求解析行为。 标准的 HttpRequest 属性 由于 REST framework 的 Request 扩展于 Django 的 HttpRequest,所有其他标准属性和方法也可用。例如request.META 和 request.session 字典都可以正常使用。

response响应

与基本的 HttpResponse 对象不同,TemplateResponse 对象保留了视图提供的用于计算响应的上下文的详细信息。直到需要时才会计算最终的响应输出,也就是在后面的响应过程中进行计算。 REST framework 通过提供一个 Response 类来支持 HTTP 内容协商,该类允许你根据客户端请求返回不同的表现形式(如: JSON ,HTML 等)。 Response 是 Django 的 SimpleTemplateResponse 的子类。Response 对象使用数据进行初始化,数据应由 Python 对象(native Python primitives)组成。然后 REST framework 使用标准的 HTTP 内容协商来确定它应该如何渲染最终响应的内容。 当然,也可以不使用 Response 类,直接返回常规 HttpResponse 或 StreamingHttpResponse 对象。 使用 Response 类只是提供了一个更好的交互方式,它可以返回多种格式。 除非由于某种原因需要大幅度定制 REST framework ,否则应该始终对返回 Response 对象的视图使用 APIView 类或 @api_view 装饰器。这样做可以确保视图执行内容协商,并在视图返回之前为响应选择适当的渲染器。 1、创建 response Response() 与普通 HttpResponse 对象不同,您不会使用渲染的内容实例化 Response 对象。相反,您传递的是未渲染的数据,可能包含任何 Python 对象。 由于 Response 类使用的渲染器不能处理复杂的数据类型(比如 Django 的模型实例),所以需要在创建 Response 对象之前将数据序列化为基本的数据类型。 你可以使用 REST framework 的 Serializer 类来执行序列化的操作,也可以用自己的方式来序列化。 构造方法: Response(data, status=None, template_name=None, headers=None, content_type=None) 参数: data: 响应的序列化数据。 status: 响应的状态代码。默认为200。 template_name: 选择 HTMLRenderer 时使用的模板名称。 headers: 设置 HTTP header,字典类型。 content_type: 响应的内容类型,通常渲染器会根据内容协商的结果自动设置,但有些时候需要手动指定。 属性 .data 还没有渲染,但已经序列化的响应数据。 .status_code 状态码 .content 将会返回的响应内容,必须先调用 .render() 方法,才能访问 .content 。 .template_name 只有在 response 的渲染器是 HTMLRenderer 或其他自定义模板渲染器时才需要提供。 .accepted_renderer 用于将会返回的响应内容的渲染器实例。 从视图返回响应之前由 APIView 或 @api_view 自动设置。 .accepted_media_type 内容协商阶段选择的媒体类型。 从视图返回响应之前由 APIView 或 @api_view 自动设置。 .renderer_context 将传递给渲染器的 .render() 方法的附加的上下文信息字典。 从视图返回响应之前由 APIView 或 @api_view 自动设置。 标准 HttpResponse 属性 Response 类扩展于 SimpleTemplateResponse,并且响应中也提供了所有常用的属性和方法。例如,您可以用标准方式在响应中设置 header: response = Response() response['Cache-Control'] = 'no-cache' .render() 与其他任何 TemplateResponse 一样,调用此方法将响应的序列化数据呈现为最终响应内容。响应内容将设置为在 accepted_renderer 实例上调用 .render(data,accepted_media_type,renderer_context) 方法的结果。 通常不需要自己调用 .render() ,因为它是由 Django 处理的。 reverse返回url routers路由 schemas (package) serializers序列化 settings设置 status状态码 templatetags (package) test测试 throttling限速 urlpatterns urls utils (package) validators验证器 versioning版本控制器 views视图 viewsets视图集

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年09月18日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档