一.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')

实现效果
叮当物联-django API测试

是不是它自动更改了API的请求路径,但是后台也还是能够正常匹配到路径。

使用以下模板标签获取后台的数据

{% url 'api-nav:category-list' %}
它实际请求的为 View 里面的 category-list方法。

叮当物联-view_url截图

叮当物联-api 的 url截图

二、后台路径参数的匹配
1.表的唯一关键字设置为id,设置类型为uuid,在模板里面传递参数。

先设置参数匹配的正则表达式

  url(r'^category/(?P<pk>[0-9a-zA-Z\-]{36})/update/$', category.CategoryUpdateView.as_view(), name='category-update')

叮当物联-Django的Url参数设置截图

前台模板设置相关的Url标签为:

  var the_url = '{% url "api-nav:category-detail" pk=DEFAULT_PK %}'.replace("{{ DEFAULT_PK }}", uid);

叮当物联-Django的Url参数模板标签设置截图

参数名需要设置一致,后台可以通过以下代码获取到后台传递的参数值。

self.object.pk
Last modification:February 6th, 2020 at 10:01 pm
如果觉得我的文章对你有用,请随意赞赏