Django HTTP请求的URL路由

创建项目APP

Django 中的一个app 就是项目里面的一个应用的意思。一个项目包含多个app。

一个app 通常就是一个相对独立的模块 ,实现相对独立的功能。

一个app 本质上 就是一个 Python 包, 里面包含了一些应用相关的代码文件。

Django 中创建app 可以 通过执行命令,创建一个app目录,并在里面自动创建app常用的文件。

我们就进入项目根目录,执行下面的命令。

python manage.py startapp sales //sales app名

这样就会创建一个目录名为 sales, 对应 一个名为 sales 的app,里面包含了如下自动生成的文件。

sales/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

这个目录其实就是一个python package

返回页面内容给浏览器

比如,我们 设计 凡是浏览器访问的http 请求的 url 地址 是 /sales/orders/ , 就由 views.py 里面的函数 listorders 来处理, 返回一段字符串给浏览器。

请大家 打开 views.py , 在里面加入如下内容

from django.http import HttpResponse

def listorders(request):
    return HttpResponse("下面是系统中所有的订单信息。。。")

注意

  • 这里面最终的返回结果是 HttpResponse 对象的参数字符串。
  • listorders的参数request是Django中的 HttpQuest对象,包含了请求中的信息。

光是定义了这样一个函数不行的,我们需要 告诉 Django :

当前端发送过来的HTTP请求 url地址 是 /sales/orders/ , 就由 views.py 里面的函数 listorders 来处理

添加路由URL

from django.contrib import admin
from django.urls import path
# 别忘了导入 listorders 函数
from sales.views import listorders
urlpatterns = [
    path('admin/', admin.site.urls),
    # 添加如下的路由记录
    path('sales/orders/', listorders),
]

urlpatterns 列表 就是 Django 的 url 路由的入口。

重启项目,我们这时,就可以登录浏览器输入网址 http://127.0.0.1/sales/orders/

路由子表

可以将不同的路由记录 按照功能 分拆到不同的 url路由子表 文件中。

在APP创建URL路由表

后在这个 sales\urls.py 文件中输入如下内容

from django.urls import path

from . import views

urlpatterns = [
    path('orders/', views.listorders),
]

然后,我们再修改主url路由文件 bysms/urls.py , 如下

from django.contrib import admin

# 导入一个include函数
from django.urls import path, include

from sales.views import listorders
urlpatterns = [
    path('admin/', admin.site.urls),

    # 凡是 url 以 sales/  开头的,
    # 都根据 sales.urls 里面的 子路由表进行路由
    path('sales/', include('sales.urls')),

]

http请求过来时, Django检查 url,比如这里是sales/orders/

先到主url路由文件 bysms/urls.py中查看 是否有匹配的路由项

如果有匹配 ( 这里匹配了 sales/ ), 并且匹配的对象 不是 函数, 而是 一个子路由设置 , 比如这里是 include('sales.urls')

去子路由文件中查看 sales.urls 对应的文件 sales\urls.py 。

注意这时,会从请求url中去掉 前面主路由文件 已经匹配上的部分(这里是 sales/ ), 将剩余的部分 (这里是 orders/ )去子路由文件中查看是否有匹配的路由项。

这里就匹配了 orders/ ,匹配的对象,这里是 views.listorders ,它是一个处理函数,就调用该函数处理 这个http请求, 将该函数的返回对象 构建 HTTP响应消息,返回给客户端。

 

可以多层拆分

或者按照正则匹配原则。

 

文章已创建 80

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部