返回URL-Django REST框架
reverse.py
返回URL
将REST体系结构风格与其他基于网络的风格区分开来的中心特性是它强调组件之间的统一接口。
罗伊·菲尔丁体系结构风格与基于网络的软件体系结构设计
通常,最好从WebAPI返回绝对URI,例如http://example.com/foobar
,而不是返回相对URI,例如/foobar
.
这样做的好处是:
- 更明确一些。
- 它为您的API客户端留下了更少的工作。
- 当字符串出现在没有本机URI类型的JSON等表示中时,对字符串的含义没有任何含糊之处。
- 它使得使用超链接进行标记HTML表示这样的事情变得很容易。
REST框架提供了两个实用函数,使从WebAPI返回绝对URI更加简单。
您不需要使用它们,但是如果您使用它们,那么自描述API将能够自动为您超链接其输出,从而使浏览API更加容易。
倒转
签署: reverse(viewname, *args, **kwargs)
有相同的行为django.urls.reverse
,除非它返回一个完全限定的URL,使用请求来确定主机和端口。
你应该将请求包含为关键字参数,例如:
from rest_framework.reverse import reverse
from rest_framework.views import APIView
from django.utils.timezone import nowclass APIRootView(APIView):def get(self, request):year = now().yeardata = {...'year-summary-url': reverse('year-summary', args=[year], request=request)}return Response(data)
反向懒惰
签署: reverse_lazy(viewname, *args, **kwargs)
有相同的行为django.urls.reverse_lazy
,除非它返回一个完全限定的URL,使用请求来确定主机和端口。
就像倒转
函数,你应该将请求包含为关键字参数,例如:
api_root = reverse_lazy('api-root', request=request)