django url路由配置教程
2022年7月9日大约 3 分钟约 755 字
urls.py
from django.urls import path, re_path, include
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static
from django.views.generic import TemplateView
from rest_framework.routers import DefaultRouter
from rest_framework.documentation import include_docs_urls
from persons import views
# 使用视图集时,注册路由
# 创建路由器并注册我们的视图集
# router = DefaultRouter()
# router.register(r'persons', views.PersonViewSet, basename='persons')
# router.register(r'users', views.UserViewSet, basename='users')
urlpatterns = [
path('admin/', admin.site.urls),
re_path('^docs/', include_docs_urls(title="项目api文档")), # api文档功能,注意不能包含停止符$
path('api-auth/', include('rest_framework.urls')), # 调试api的认证接口,可浏览的API的登录和注销视图,配置了才会在可浏览api界面出现登录按钮
re_path(r'^persons/$', views.PersonListView.as_view(), name='person-list'),
re_path(r'^persons/(?P<pk>[0-9]+)/$', views.PersonDetailView.as_view(), name='person-detail'),
re_path(r'^users/$', views.UserListView.as_view(), name='user-list'),
re_path(r'^users/(?P<pk>[0-9]+)/$', views.UserDetailView.as_view(), name='user-detail')
# re_path(r'^', include(router.urls)),
# path('', TemplateView.as_view(template_name="index.html"), name="index") # 直接返回html
]
# 以下演示其他功能
urlpatterns += [
# 将app的url提取出来单独放在app里面
# url(r'^testapp/',include('oneApp.urls')),
# 直接调用模板
# path('register/', TemplateView.as_view(template_name="indexapp/register.html"), name='register'),
# 传参
# path('news_detail/<str:newId>/', websiteapp_views.NewsDetailsView.as_view(), name="newsList"),
]
# 设置media可被访问,如下设置可用于开发中使用,若部署到服务器可用服务器软件设置:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
restful api规范
restful api是目前前后端分离的最佳实践
restful api组成:
- 使用http协议,通过post增加/get获取/put更新/patch部分更新/delete删除 方法操作。动词,代表你要做什么
- 面向资源,要求URL是一个资源。名词,代表你要给谁做
- 一般通过json格式做数据通信。
restful api规范:
- 尽量部署专用域名,例如:http://api.example.com,也可以使用 http://example.com/api/
- api版本信息一般放url上,例如:http://api.example.com/v1/,也可以放在http头
- url资源路径应该使用名称复数,不应该有动词,而且所用名称往往与数据库表名对应
举例说明:
# --------url请求----------
get /shops: 列出所有商店
post /shops: 添加一个商店
get /shops/ID: 获取某个商店数据
put /shops/ID: 更新某个商店数据(提供商品全部数据)
patch /shops/ID: 更新某个商店数据(提供商品部分数据)
delete /shops/ID: 删除某个商店
get /shops/ID/goods: 列出某个商店的所有商品
delete /shops/ID/goods/ID: 删除某个商店的某个商品
# ------url过滤参数--------
?limit=10: 返回数量
?offset=10: 开始位置
?page=2&per_page=100: 第几页,每页数量
?sortby=name&order=asc: 排序,降序或升序
返回状态码:
200 OK: get请求成功
201 CREATED: post/put/patch创建或更新成功
202 Accepted: 请求已经在排队处理(异步任务)
204 NO CONTENT: delete删除成功
400 INVALID REQUEST: post/put/patch操作失败
401 Unauthorized: 没有权限
403 Forbidden: 有权限,但禁止访问
404 NOT FOUND: 没有找到资源
406 Not Acceptable: 不接受这种数据格式
410 Gone: get请求的资源被永久删除
422 Unprocesable entity: post/put/patch时,验证错误
500: 服务器错误