Browser Enhancements - Django REST framework

浏览器增强-Django REST框架

浏览器增强

“过载邮件有两个没有争议的用途。模拟http为客户端提供的统一接口,比如不支持PUT或DELETE的Web浏览器。

— RESTful Web服务题名/责任者:David L.

为了允许可浏览API发挥作用,REST框架需要提供一些浏览器增强功能。

从3.3.0版本开始,使用javascript启用这些功能,使用AJAX-形式图书馆。

基于浏览器的放置、删除等.

这个Ajax表单库支持基于浏览器的PUT, DELETE以及HTML表单上的其他方法。

包含库后,使用data-method属性,如下所示:

...

请注意,在3.3.0之前,这种支持是服务器端的,而不是基于javascript的。方法重载样式(如Ruby on Rails)不再受支持,因为它在请求解析中引入了一些微妙的问题。

基于浏览器的非表单内容提交

类支持基于浏览器的内容类型提交(如JSON)。Ajax表单库,使用表单字段data-override='content-type'data-override='content'属性。

例如:

    

请注意,在3.3.0之前,这种支持是服务器端的,而不是基于javascript的。

基于URL的格式后缀

REST框架可以?format=json样式URL参数,它是确定应该从视图返回哪种内容类型的有用快捷方式。

控件控制此行为。URL_FORMAT_OVERRIDE背景。

基于HTTP头的方法重写

在3.3.0版本之前,半扩展头X-HTTP-Method-Override支持重写请求方法。这种行为不再存在于核心中,而是可以在需要时使用中间件进行添加。

例如:

METHOD_OVERRIDE_HEADER = 'HTTP_X_HTTP_METHOD_OVERRIDE'

class MethodOverrideMiddleware:

    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        if request.method == 'POST' and METHOD_OVERRIDE_HEADER in request.META:
            request.method = request.META[METHOD_OVERRIDE_HEADER]
        return self.get_response(request)

基于URL的接受标头

在3.3.0版本之前,REST框架包含了对?accept=application/json样式URL参数,这将允许Accept标题将被重写。

由于引入了内容协商API,此行为不再包含在CORE中,而是可以使用自定义内容协商类来添加(如果需要的话)。

例如:

class AcceptQueryParamOverride()
    def get_accept_list(self, request):
       header = request.META.get('HTTP_ACCEPT', '*/*')
       header = request.query_params.get('_accept', header)
       return [token.strip() for token in header.split(',')]

HTML 5不支持放置和删除表单吗?

没有。它一度打算支持PUTDELETE表格,但后来从规格上掉下来...有遗骸正在进行的讨论关于增加对PUTDELETE,以及如何支持表单编码数据以外的内容类型。

你可能感兴趣的:(Browser Enhancements - Django REST framework)