Django-创建子应用和路由


创建子应用

定义

  • 将工程项目拆分为不同的子功能模块
    – 以子应用的形式存在
  • 各功能模块间可以保持相对的独立
  • 可以将该模块代码整体复制过去

创建

方式一

使用命令行创建,python manage.py startapp 子应用名 路径。路径一般不加,默认创建到当前根目录下。
在这里插入图片描述
在这里插入图片描述

方式二

点击Tools,选择run manage.py Task。在下面输入‘startapp 子应用名’即可创建子应用。
在这里插入图片描述

意义

  • 将各功能模块保持独立(解耦)
  • 方便各功能模块进行重用

子应用目录结构

projects/       用于存放子应用的所有信息
  migrations/    用于存放数据库迁移脚本
  admin.py     用于存放后台管理站点的相关配置
  apps.py     用于存放app的配置信息
  models.py     用于存放ORM数据库模型
  tests.py      用于对当前子应用进行单元测试
  views.py      用于定义业务逻辑

注册子应用

打开setting.py文件,有一个名为‘INSTALLED_APPS’的列表,就是用来存放子应用的。
在这里插入图片描述
将刚创建的子应用名称加到列表中。也可以添加‘子应用名.apps.子应用名首字母大写Config’,比较长,不推荐这种写法。
在这里插入图片描述

路由

路由就是url与后端视图之间的映射条目

新建路由

在子应用的view.py中写业务逻辑。

在这里插入图片描述
打开主文件夹中的urls.py文件,此文件存放全局路由信息,在列表urlpatterns中添加路由,此列表是存放路由条目的。

在这里插入图片描述
重启项目,在浏览器地址中输入http://127.0.0.1:8000/projects/就能访问到了。
在这里插入图片描述

路由匹配规则

  1. urlpatterns列表中从上到下进行匹配
  2. 如果匹配不成功,那么会往下匹配
  3. 如果当前路由匹配成功,会自动调用path函数第二个参数的函数
  4. 一旦路由匹配成功,那么不会继续往下匹配
  5. 如果所有的路由都匹配不成功,会抛出404异常(返回404页面)

路径参数

如果想要实现在url路径中放参数,就要用到路径参数。可以在定义路由条目时,接收路径参数。

格式:<类型转化器:参数名称>

修改项目url.py文件中的路由信息:

urlpatterns = [
    ...
    path('projects/<int:pk>/', index),
    ...
]

<int:pk>就是一个路由参数,指定了参数的类型是int,参数名称是pk。此时需要注意,传了pk参数,那么这条路由后的index方法就要接收pk参数,我们再去修改views.py文件中的index方法。

def index(request, pk):
    return HttpResponse(f'Hello, 这是一个测试Dome!{pk}')

此处可以设置的类型有:int、str、slug、uuid等

  • int和str就不解释了。
  • slug:值有效的url的一部分,能使url更清晰易懂。比如有一篇文章是“13岁的孩子”,他的url地址是“/post/13_child”,后面的13_child就是slug。
  • uuid:全球唯一标识符,是由算法产生的128位标识符。例如:a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11

正则匹配路由

可以使用re_path来定义路由条目。

  • 支持正则表达式
  • 固定形式r'^路径或者正则表达式/$'
urlpatterns = [
	...
    re_path(r'^requests/(?P<pk>\d{2})/$', do_request),# 匹配‘requests/’后加两位整数
]

子路由

如果所有路由信息都放在主路由中,那主路由的列表会变得很庞大,不便维护和管理。所以我们就在子应用中创建子路由。在主路由中匹配url的第一部分,在子路由匹配后面的部分。
在子应用中创建urls.py文件,这就是子路由。子路由的匹配方式与主路由一致。

子路由:

from django.urls import path
from .views import index # 以相对路径导入views

urlpatterns = [
    path('project/', index),
]

子路由写好后,还需在主路由中关联。关联格式:include(‘子应用名.urls’)

from django.urls import include
urlpatterns = [
    path('projects/', include('projects.urls')),
]

此时,输入url‘ip:端口/projects/project/’就会执行子应用的index方法。
需要注意的是,一旦进入到子路由中匹配,未找到匹配项,会报404异常,不会再到主路由继续匹配。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值