Django 路由详解(一)
路由规则
完整的路由包含:路由地址、视图函数或视图类、可选变量、路由命名。其中必须要有的信息:路由地址、视图函数或视图类。路由地址就是我们访问的地址,视图函数(或视图类)即App应用目录下views.py文件中定义的函数或类。
在创建项目时,会自动生成一个urls.py的路由配置文件,而自己在项目下创建的App应用默认没有urls.py配置文件,通常情况下,我们会每个App下手动新建一个urls.py的配置文件,来管理该App的路由地址。其工作原理如下:
- 运行Django项目时,Django从项目下urls.py找到各个App所定义的路由信息,生成完整的路由列表。
- 当用户在浏览器上访问某个路由地址时,Django就会收到该用户的请求信息。
- Django从当前请求信息获取路由信息,并在路由列表里匹配相应的路由信息,再执行路由所指向的视图函数或视图类,通过视图函数或视图类对业务逻辑或数据进行处理后返回给前端,从而完成整个请求响应过程。
这种路由设计模式,在项目文件夹下urls.py代码如下:
from django.contrib import admin from django.urls import path,include urlpatterns = [ #指向内置Admin后台系统的路由文件sites.py path('admin/', admin.site.urls), #指向myapp应用内的路由配置文件urls.py path("",include("myapp.urls")), ]
- 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目录:Python39\Lib\site-packages\django\contrib\admin\sites.py找到具体定义过程。
- path("" , include("myapp.urls")): 路由地址为“\”,即127.0.0.1:8000,通常是网站的首页;路由函数include是将该路由信息分发给myapp的urls.py处理。
由于首页地址分发给myapp的urls.py处理,因此下一步需要对index的urls.py编写路由信息,代码如下:
#myapp urls.py from django.urls import path,re_path from myapp.views import myapp_index urlpatterns = { #配置myapp应用路由地址,指向myapp的views.py中的视图函数myapp_index path("",myapp_index) }
在myapp的urls.py中,导入views.py视图中的函数myapp_index,并且设置默认访问地址,指向myapp_index 视图函数。
下面是myapp应用下views.py中编写myapp_index函数的处理过程:
from django.shortcuts import render # Create your views here. def myapp_index(request): value = "这是myapp应用的myapp_index视图" content = { "info" :value } return render(request,"index.html",content)
myapp_index函数必须设置一个参数,参数命名不固定,通常设置为request,代表当前用户的请求对象,该请求对象包含当前请求的用户名、请求内容和请求方式等。视图函数执行完成后必须使用return将处理结果返回,否则程序会抛出异常信息。
修改index.html模板的内容,让浏览器打印info变量的内容:
<html lang="en"> <head> <mete charset="utf-8"></mete> <title>hello word</title> </head> <body> <p>{{info}}</p> </body> </html>
在浏览器里访问http://127.0.0.1:8000/,结果如下:
补充:当前启动项目时,Django会从配置文件settings.py读取属性ROOT_URLCONF的信息,默认值为:MyDjango.urls,其代表MyDjango文件夹的urls.py文件,然后根据ROOT_URLCONF的值生成整个项目的路由列表。