格式后缀-Django REST框架
urlpatterns.py
格式后缀
第6.2.1节没有规定内容谈判应始终使用。
罗伊·菲尔丁REST讨论邮件列表
A common pattern for Web APIs is to use filename extensions on URLs to provide an endpoint for a given media type. For example, 'http://example.com/api/users.json' to serve a JSON representation.
为您的API在URLconf中的每个条目中添加格式-后缀模式是错误的,而且是不干燥的,因此REST框架提供了将这些模式添加到URLConf的快捷方式。
格式后缀模式
签名:Format_后缀_Patterns(urlatterns,后缀要求=false,LEXED=None)
返回URL模式列表,该列表包括附加到所提供的每个URL模式的格式后缀模式。
论点:
- 耳纹*需要。URL模式列表。
- 后缀要求*任选。一个布尔值,指示URL中的后缀是可选的还是强制性的。默认为
False
,这意味着后缀在默认情况下是可选的。 - 允许*任选。有效格式后缀的列表或元组。如果未提供,则将使用通配符格式后缀模式。
例子:
from rest_framework.urlpatterns import format_suffix_patterns
from blog import viewsurlpatterns = [url(r'^/$', views.apt_root),url(r'^comments/$', views.comment_list),url(r'^comments/(?P<pk>[0-9]+)/$', views.comment_detail)
]urlpatterns = format_suffix_patterns(urlpatterns, allowed=['json', 'html'])
使用时格式后缀模式
,您必须确保添加'format'
关键字参数到相应的视图。例如:
@api_view(['GET', 'POST'])
def comment_list(request, format=None):# do stuff...
或基于类的视图:
class CommentList(APIView):def get(self, request, format=None):# do stuff...def post(self, request, format=None):# do stuff...
使用的kwarg名称可以使用FORMAT_SUFFIX_KWARG
背景。
还请注意格式后缀模式
不支持降至include
URL模式
用与i18n_patterns
如果使用i18n_patterns
Django提供的功能以及格式后缀模式
你应该确保i18n_patterns
函数作为最终函数或最外层函数应用。例如:
url patterns = […
]urlpatterns = i18n_patterns(format_suffix_patterns(urlpatterns, allowed=['json', 'html'])
)
查询参数格式
格式后缀的替代方法是将请求的格式包含在查询参数中。REST框架默认提供此选项,并在可浏览API中用于在不同的可用表示之间进行切换。
若要使用其短格式选择表示形式,请使用format
查询参数例如:http://example.com/organizations/?format=csv
.
可以使用URL_FORMAT_OVERRIDE
背景。将值设置为None
若要禁用此行为,请执行以下操作。
接受标题与格式后缀
在一些Web社区中,似乎有一种观点认为文件名扩展不是RESTful模式,而且HTTP Accept
应该始终使用标头。
这其实是一种误解。例如,以下引用RoyFielding的话,讨论了查询参数媒体类型指示符与文件扩展名媒体类型指示符的相对优点:
“这就是为什么我总是喜欢扩展。任何选择都与休息无关。“-罗伊·菲尔丁REST讨论邮件列表
引号没有提到接受标题,但它确实表明格式后缀应该被认为是一个可接受的模式。