Django学习笔记3 HTTP请求的url路由

创建项目app

  • Django 中的一个项目包含多个app。一个app就是一个相对独立的模块 ,实现相对独立的功能,可以看作一个应用,本质上是一个Python 包,里面包含了一些应用相关的代码文件。

  • 比如,我们可以把系统的管理员管理的功能做在一个名字为mgr的app里面,把销售人员的操作实现在另外一个名字为sales的app里面。

  • 一个项目分成多少个app完全取决开发者的设计。

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

比如,现在我们需要一个app专门处理白月医药系统中销售员的添加、修改、查询、删除请求。
我们就进入项目根目录,执行下面的命令。
python manage.py startapp sales
这样就会创建一个目录名为sales,对应一个名为sales的app,里面包含了如下自动生成的文件。这就是一个python package。

返回页面内容给浏览器

  • 当我们输入网址访问百度后, 浏览器会发出http请求给百度的服务器,百度服务器返回 HTML 文档内容给浏览器, 浏览器解析后,呈现出我们最终看到的网页内容。服务器返回的 HTML 文档内容其实就是符合HTML 语法的一段字符串而已。

  • 刚才的 sales 应用里面有个 views.py文件。这个文件里面通常是写处理http请求的代码的。我们假设凡是浏览器访问的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的url路由来告诉 Django :当前端发送过来的HTTP请求 url地址 是 /sales/orders/ , 就由 views.py 里面的函数 listorders 来处理。

url路由

添加路由记录

这是url路由设置的入口文件。 与项目同名的配置文件夹下。

打开该文件,在urlpatterns列表变量中添加一条路由信息,结果如下

from django.contrib import admin
from django.urls import path
# 别忘了导入 listorders 函数
from sales.views import listorders
urlpatterns = [
    path('admin/', admin.site.urls),
    # 访问‘admin/’这个网址的时候,由admin.site.urls处理
    # 添加如下的路由记录
    path('sales/orders/', listorders),
]

urlpatterns列表 就是 Django 的 url 路由的入口。里面是一条条的路由记录,我们添加的path('sales/orders/', listorders)就是告诉 django 当前端过来的请求url地址是 /sales/orders/ , 就由 views.py 里面的函数 listorders 来处理。

通常我们项目代码的修改, Django的测试服务可以自动检测到,并且重新加载,不需要我们重启 Django Web 服务。如果大家想重新启动 Django web 服务, 大家可以在启动web服务的命令行窗口,按ctrl + break(也就是Pause按钮)先停止服务。 然后再次运行启动命令。

刷新后

这就是浏览器的请求经过 Django路由后, 选择执行我们定义的函数 listorders,该函数 返回的字符串, 被作为http响应的消息体中的内容返回给浏览器了。
所以浏览器最终显示的就是我们 listorders 函数返回的字符串。

路由子表

url 路由表就是一个请求对应一个处理函数。

我们通常可以将不同的路由记录按照功能分拆到不同的url路由子表文件中。
比如,这里我们可以把访问的 url 凡是以 sales 开头的全部都由 sales app 目录下面的子路由文件 urls.py 处理。
首先我们需要在 sales 目录下面创建一个新的文件 sales\urls.py 。然后在这个 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')),
]

include是Django里一个专门处理路由的函数。

当一个http请求过来时, Django检查 url,比如这里是sales/orders/,先到主url路由文件 bysms/urls.py中查看是否有匹配的路由项。如果有匹配 ( 这里匹配了 sales/), 并且匹配的对象是一个子路由设置 , 比如这里是include('sales.urls') 就会去子路由文件中(sales\urls.py)中查看 。
注意这时,会从请求url中去掉前面主路由文件 已经匹配上的部分(这里是 sales/), 将剩余的部分(这里是 orders/ )去子路由文件中查看是否有匹配的路由项。
匹配到 orders/ ,匹配的对象,这里是 views.listorders ,它是一个处理函数,就调用该函数处理这个http请求,将该函数的返回对象构建 HTTP响应消息,返回给客户端。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值