如何在Django REST framework中利用SimpleRouter
和DefaultRouter
来高效生成视图集的路由信息,并详细解释如何使用action
装饰器为视图集中的自定义方法生成路由
1.路由的定义规则
路由称为URL(Uniform Resource Locator,统一资源定位符),也可以称为URLconf,是对可以从互联网上得到的资源位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的路由,用于指出网站文件的路径位置。简单地说,路由可视为我们常说的网址,每个网址代表不同的网页。
我们知道完整的路由包含:路由地址、视图函数(或者视图类)、可选变量和路由命名。其中基本的信息必须有:路由地址和视图函数(或者视图类),路由地址即我们常说的网址,视图函数(或者视图类)即App的views.py文件所定义的函数或类。
在App(index文件夹)里添加urls.py是将所有属于App的路由都写入该文件中,这样更容易管理和区分每个App的路由地址,而MyProject文件夹的urls.py是将每个App的urls.py统一管理。这种路由设计模式是Django常用的,其工作原理如下:
(1) 运 行 MyProject项 目 时 , Django 从 MyProject文 件 夹 的urls.py找到各个App所定义的路由信息,生成完整的路由列表。
(2)当用户在浏览器上访问某个路由地址时,Django就会收到该用户的请求信息。
(3)Django从当前请求信息获取路由地址,并在路由列表里匹配相应的路由信息,再执行路由信息所指向的视图函数(或视图类),从而完成整个请求响应过程
MyProject文件夹的urls.py定义两条路由信息,分别是Admin站点管理和首页地址(index)。其中,Admin站点管理在创建项目时已自动生成,一般情况下无须更改;首页地址是指index文件夹的urls.py。MyProject文件夹的urls.py的代码解释如下:
●from django.contrib import admin:导入内置Admin功能模块。
●from django.urls import path,include:导入Django的路由函数模块。
●urlpatterns:代表整个项目的路由集合,以列表格式表示,每个元素代表一条路由信息。
●path('admin/', admin.site.urls) : 设 定 Admin 的 路 由 信息。'admin/'代表127.0.0.1:8000/admin的路由地址,admin后面的斜杠是路径分隔符,其作用等同于计算机中文件目录的斜杠符号;
admin.site.urls指向内置Admin功能所自定义的路由信息,可以在Python 目 录 Lib\site-packages\django\contrib\admin\sites.py 找到具体定义过程。
● path('',include('index.urls')) : 路 由 地 址 为 “\” , 即127.0.0.1:8000,通常是网站的首页;路由函数include是将该路由信息分发给index的urls.py处理。
由于首页地址分发给index的urls.py处理,因此下一步需要对index的urls.py编写路由信息
index的urls.py的编写规则与MyProject文件夹的urls.py大致相同,这是最为简单的定义方法,此外还可以参考内置Admin功能的路由定义方法。在index的urls.py导入index的views.py文件,该文件用于编写视图函数或视图类,主要用于处理当前请求信息并返回响应内容给用户。路由信息path('', views.index)的views.index是指视图函数index处理网站首页的用户请求和响应过程。因此,在index的views.py中编写index函数的处理过程
路由文件urls.py的路由定义规则是相对固定的,路由列表由urlpatterns表示,每个列表元素代表一条路由。路由是由Django的path函数定义的,该函数第一个参数是路由地址,第二个参数是路由所对应的处理函数(视图函数或视图类),这两个参数是路由定义的必选参数
简而言之,Django 的路由(urls)系统的作用就是使 views 中处理数据的函数与请
求的 URL 建立映射关系。使请求到来之后,根据 urls.py 中的关系条目,查找到与请求对应的处理方法,从而返回给客户端 HTTP 页面数据,执行过程如图:
Django 项目中的 URL 规则定义放在 project 的 u