美文网首页
Browser Enhancements - Django RE

Browser Enhancements - Django RE

作者: Mead170810 | 来源:发表于2019-11-04 09:15 被阅读0次

    浏览器增强-Django REST框架

    浏览器增强

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

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

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

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

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

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

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

    <form action="/" data-method="PUT">
        <input name='foo'/>
        ...
    </form>
    
    

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

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

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

    例如:

        <form action="/">
            <input data-override='content-type' value='application/json' type='hidden'/>
            <textarea data-override='content'>{}</textarea>
            <input type="submit"/>
        </form>
    
    

    请注意,在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 RE

          本文链接:https://www.haomeiwen.com/subject/hfxfbctx.html