django学习 四.django路由
当用户从Django的站点请求页面时,Django系统遵循以下步骤来执行的Python代码:
-
首先Django确定要使用的根URLconf模块,通过
ROOT_URLCONF
来设置,具体在settings.py
配置文件中。但是如果传入HttpRequest
对象具有urlconf
属性(由中间件设置),则其值将用于替换ROOT\_URLCONF
设置。 -
Django加载该Python模块并查找该变量
urlpatterns
。它是django.urls.path()
和(或)django.urls.re_path()
实例的序列(sequence)。urlpatterns表示路由模型,通过路由模型寻找里面具体的地址 -
Django按顺序运行每个URL模式,并在匹配所请求的URL的第一个URL中停止。
-
一旦正则表达式匹配,Django将导入并调用给定的视图,这是一个简单的Python函数(或基于类的视图)。该视图会获得如下参数:
- 一个
HttpRequest
实例。 - 如果匹配的正则表达式没有返回任何命名组,那么来自正则表达式的匹配将作为位置参数提供。
- 关键字参数由正则表达式匹配的任何命名组组成,由可选kwargs参数中指定的任何参数覆盖。
django.urls.path\(\)
、django.urls.re_path\(\)
。
- 一个
-
如果没有正则表达式匹配,或者在此过程中的任何一点出现异常,Django将调用适当的错误处理视图
下面我们具体讲一下路由的相关操作
首先,打开django的路由页面,可以看到系统已经配置好一个路由,这个路由访问就是django自带的后端管理系统
启动项目,通过地址加路由的admin去访问,访问可直接到django的后端登录页面
接下来,我们设置一个自己的页面路由
设置页面,首先,要创建一个页面,在views里面创建我们需要的页面,打印一句话
路由分发
因为我们的views是在项目里面,而url是在配置文件目录下的总路由里面,为了方便管理项目,一般会在对应的项目里面添加一个urls的子路由文件
要让系统识别子路由,需要导入方法:include(也被称为路由分发)
问题:django项目中多个app目录共用一个url容易造成混淆,后期维护也不方便

然后对应的内容拷贝到我们项目中的url中,导入views模块,然后写下对应的路径
path中的参数:第一个是我们访问的路由,第二个参数是对应路由访问后需要调用的内容
然后启动项目,通过我们配置的路径去访问,看到内容即成功
当中做了一个什么事情呢
通过浏览器访问服务
127.0.0.1:8000/abc ==> root url(根路由) ==> 加载子路由(myweb/urls.py)
==> 正则匹配访问的路径(path) =-=> 视图函数(views.index)
==> views.py index() 响应内容

因为我们这里用了一个分组,所以在对应的views方法中也要传入一个形参
带参数的路由
在有些时候,我们回指定路由的格式,比如限制子路由必须是3位数的数子之类的,这个时候,路由又该怎么写呢
在路由里面设置,通过/<数据类型:参数值>,表示要传入的参数,如下图我们传入的num是int型,访问只能通过int型才能访问这个地址
在对应的视图方法里面,必须调用这个参数,可以给参数一个默认值,如果给了默认值,就算输入数字,也能自动带出
如果能看到对应的内容,就是访问成功
传入多个参数的写法也一样
命名空间
根据路由都是先查询第一个myapp,而不是app,这样他会默认打开第一个name=“index"名称的路由
第二种:直接在路由添加命名空间,app_name=项目名
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律