关于本站
1、基于Django+Bootstrap开发
2、主要发表本人的技术原创博客
3、本站于 2015-12-01 开始建站
有些时候初学Django,经验不足会导致一种现象:app规划混乱。一个app混杂多个model,甚至这些model关联性不大。更严重的情况是整个Django项目只有1个app,该app混杂很多个models和各种views代码。
这种情况很不利于维护和后期功能拓展。如果让其他人接手你的代码,他们一定很头疼。
然而,整理混乱的代码不是一件简单的事情。假如你的app中models关联性比较强,可以拆分models.py文件。如下某个app的models.py文件代码:
#coding:utf-8 from django.db import models class Blog(models.Model): pass class Tag(models.Model): pass class Author(models.Model): pass
我们可以使用__init__.py方法拆分models.py。
首先,创建一个models文件夹。在models文件夹,创建一个空的__init__.py文件。这样models文件夹就成了一个包,可以import其中的内容。
接着,分别创建两个文件,如下所示:
models/blog.py
#coding:utf-8 from django.db import models class Blog(models.Model): pass class Tag(models.Model): pass
models/author.py
#coding:utf-8 from django.db import models class Author(models.Model): pass
将关联性更高的model放在一起完成拆分。但这样会导致Blog、Tag和Author等model引用路径发生变化。
原本引用的方式:
# 假如app的名字叫做document from document.models import Blog, Tag, Author
现在这么处理之后,引用方式变成:
from document.models.blog import Blog, Tag from document.models.author import Author
不用担心,我们可以修改__init__.py文件:
from .blog import Blog, Tag from .author import Author
如此修改之后,原本的引用方式无需修改。因为import document.models的时候,就加载__init__.py文件。这是就引入相应models。
那,如果app更加混乱,需要强势拆分为多个app呢?
例如刚刚的models.py文件中3个models。我希望把其中的Author模块单独拆分为一个独立的app。
拆分app很麻烦,引用路径是小事,主要是数据库中的表名和字段能够一一对应。若不对应会导致数据库同步、迁移、读写错误。
这个需要使用model的meta类,写入app_label信息。
原本的结构如下:
document |- migrations (数据库信息文件夹) |- __init__.py (空文件) |- models.py |- Blog |- Tag |- Author
我们需要先手动创建一个author文件夹,该文件夹和document同级。然后将Author模块从document中抽离并放到author中。如下结构:
document |- migrations (数据库信息文件夹) |- __init__.py (空文件) |- models.py |- Blog |- Tag author |- __init__.py (空文件) |- models.py |- Author
注意,author文件夹中没有migrations文件夹。author的models.py文件代码如下:
#coding:utf-8 from django.db import models class Author(models.Model): pass class meta: app_label = 'document'
这里标注app_label信息,指该model是属于document应用的。
我们还需在settings中注册该author应用。注册之后,你可以测试新增、修改和删除Author模块的字段。可发现相关的数据库操作信息会记录在document应用中。
当然,要记得修改其他文件对这个Author模块的应用。通常需要修改urls.py、views.py、migrations等等。
ps:用sublime text、notepad++、pychame等可以在指定文件夹对文件查找或替换。
mygoldwings
🍠🍈🍉🍋🍌🍍🍨⛽🚧🚀✈ 测试 不能传图片(^-^)V
2019-03-30 11:13 回复
mygoldwings
11
2019-03-30 11:14 回复
mygoldwings 回复 mygoldwings
你好棒
2019-03-30 11:14 回复