Django 路由详解(一)

路由规则

完整的路由包含:路由地址、视图函数或视图类、可选变量、路由命名。其中必须要有的信息:路由地址、视图函数或视图类。路由地址就是我们访问的地址,视图函数(或视图类)即App应用目录下views.py文件中定义的函数或类。

在创建项目时,会自动生成一个urls.py的路由配置文件,而自己在项目下创建的App应用默认没有urls.py配置文件,通常情况下,我们会每个App下手动新建一个urls.py的配置文件,来管理该App的路由地址。其工作原理如下:

  1. 运行Django项目时,Django从项目下urls.py找到各个App所定义的路由信息,生成完整的路由列表。
  2. 当用户在浏览器上访问某个路由地址时,Django就会收到该用户的请求信息。
  3. 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的值生成整个项目的路由列表。

 

 

posted @ 2022-03-27 23:15  西夏一品唐  阅读(293)  评论(0编辑  收藏  举报