一.API和URL路径的命令规范
1.如果需要URL的路径支持View 视图的话,需要将URL的路径名和API 路由的注册名一致。
例如:
view url的路径规则如下:
url(r'^category/$', category.CategoryListView.as_view(), name='category-list'),
url(r'^category/create/$', category.CategoryCreateView.as_view(), name='category-create'),
url(r'^category/(?P<pk>[0-9a-zA-Z\-]{36})/update/$', category.CategoryUpdateView.as_view(), name='category-update'),
url(r'^category/(?P<pk>[0-9a-zA-Z\-]{36})/$', category.CategoryDetailView.as_view(), name='category-detail'),
url(r'^category/(?P<pk>[0-9a-zA-Z\-]{36})/delete/$', category.CategoryDeleteView.as_view(), name='category-delete'),
url(r'^category/(?P<pk>[0-9a-zA-Z\-]{36})/user/$', category.CategoryUserView.as_view(), name='category-user-list'),
url(r'^site/$', site.SiteListView.as_view(), name='site-list'),
url(r'^site/create/$', site.SiteCreateView.as_view(), name='site-create'),
url(r'^site/(?P<pk>[0-9a-zA-Z\-]{36})/update/$', site.SiteUpdateView.as_view(), name='site-update'),
url(r'^site/(?P<pk>[0-9a-zA-Z\-]{36})/$', site.SiteDetailView.as_view(), name='site-detail'),
url(r'^site/(?P<pk>[0-9a-zA-Z\-]{36})/delete/$', site.SiteDeleteView.as_view(), name='site-delete')
那么需要将API的路由规则设置为:
router = BulkRouter()
router.register(r'v1/site', api.SiteViewSet, 'site')
router.register(r'v1/category', api.CategoryViewSet, 'category')
即router.register的第三个参数需要和url的第一个路径匹配。就是说
router.register(r'v1/api name', api.SiteViewSet, 'API匹配值')
url(r'^API匹配值/$', site.SiteListView.as_view(), name='url name'),
其中 “api name” 和 “url name” 只需要符合你自己的规则就行了,当然,我也可以将 “api name” 填成一个非常难记或者难猜的名称也可以。
比如以下这种写法,url也还是能自动匹配到的
router.register(r'v1/site', api.SiteViewSet, 'site')
router.register(r'v1/dsacategory', api.CategoryViewSet, 'category')
实现效果
是不是它自动更改了API的请求路径,但是后台也还是能够正常匹配到路径。
使用以下模板标签获取后台的数据
{% url 'api-nav:category-list' %}
它实际请求的为 View 里面的 category-list方法。
二、后台路径参数的匹配
1.表的唯一关键字设置为id,设置类型为uuid,在模板里面传递参数。
先设置参数匹配的正则表达式
url(r'^category/(?P<pk>[0-9a-zA-Z\-]{36})/update/$', category.CategoryUpdateView.as_view(), name='category-update')
前台模板设置相关的Url标签为:
var the_url = '{% url "api-nav:category-detail" pk=DEFAULT_PK %}'.replace("{{ DEFAULT_PK }}", uid);
参数名需要设置一致,后台可以通过以下代码获取到后台传递的参数值。
self.object.pk