欢迎光临散文网 会员登陆 & 注册

Django学习笔记:应用和分布式路由

2023-06-22 20:19 作者:星空收集者  | 我要投稿

在学习之前的内容中,我写了很多模板和视图函数,对应的,也写了不少的路由都挤在urls.py里,在views.py里对接口情况一目了然固然是好,但是对一个有不同业务的庞大项目来说,几千条路由挤在一个文件里显然是不合理的,springboot在这方面的处理是通过controller的类分流功能,实习模块解耦,python在这方面做的更是解耦且聚合,解耦在于利用不同的应用来拆开项目的不同模块,每个应用都有自己的模板、views.py,聚合在于通过应用的文件夹把属于改应用的文件集合在一起,这在springboot中没有体现出来,聚合的写法有点类似springcloud的微服务中的聚合思想了。

应用的创建

创建和注册应用

这里命令行的两个指令都可以,每个应用的migrations是与数据库有关的,admin.py是后台管理用的,__init__.py是每个包都会有的一个初始化文件,models.py是与数据库相关的,tests.py是测试模块,views.py是每个应用自己的视图函数文件,可见每一个app都是一个小的MTV。

分布式路由

分布式路由示意图

   作用看起来有点像网关,可以通过对路径规则进行约定,让不同app的请求被主路由转发到对应的app中进行处理,写法如下:

分布式路由示例

include 的包在path和re_path的同级目录下

应用的模板

需要手动在该应用下创建templates的文件夹,作为模板,当然要告知django我想在app下创建模板。需要确认在settings.py下修改APP_DIRS的值为True

设置后,对于django而言,模板的所在路径就是主目录下的templates以及各个app下的templates,django对模板的匹配规则是从外到内(优先匹配主目录下的templates),由上到下(按INSTALLED_APPS列表的顺序)

注意,templates不要写成template,这是与django约定的规则。

如果app下有index.html 主目录下的templates也有index.html,如何匹配到app下的index.html呢?

方法一是可以让app的index.html改名为appname_index.html,避免冲突

方法二是可以在app的temolates下不直接放html,而是先放一个appname的文件夹,如何所有的templates都放在名为appname的文件夹下,render的时候就传递'appname/index.html'.利用二级目录避开了冲突。

我很喜欢方法二,写起来优雅一些。


Django学习笔记:应用和分布式路由的评论 (共 条)

分享到微博请遵守国家法律