当前位置: 首页 > 后端技术 > Python

一个推荐的Django项目布局方式

时间:2023-03-25 20:37:06 Python

1.这种布局的优点项目中的每个应用都是相对独立的,方便以后复用。这样的布局会迫使你在开发过程中考虑每个应用程序的可重用性。开发、测试、生产等不同环境都有自己独立的配置文件,方便配置项的共享和定制。不同的环境有自己独立的pip需求文件。每个应用程序都有自己的模板和静态目录,您可以通过项目级模板和静态目录中的文件覆盖每个应用程序中的相应内容。模型、视图、管理器等的测试都保存在单独的文件中,易于阅读和理解。2、Django生成的默认布局假设项目名为foo,使用pythondjango-admin.pystartprojectfoo命令生成的默认布局为:foo/manage.pyfoo/__init__.pysettings.pyurls.pywsgi.py3、推荐项目布局假设我们的项目名为myproject,其中有两个应用博客和用户,推荐的项目布局可以是:myproject/manage.pymyproject/__init__.pyurls.pywsgi.pysettings/__init__。pybase.pydev.pyprod.pyblog/__init__.pymodels.pymanagers.pyviews.pyurls.pytemplates/blog/base.htmllist.htmldetail.htmlstatic/css/js/…tests/__init__.pytest_models.pytest_managers.pytest_views.pyusers/__init__.pymodels.pyviews.pyurls.pytemplates/users/base.htmllist.htmldetail.htmlstatic/css/js/…tests/__init__.pytest_models.pytest_views.pystatic/css/js/…templates/base.htmlindex.htmlrequirements/base.txtdev.txttest.txtprod.txt1.各个应用的目录位置最顶层的myproject目录包含manage.py文件,所以是项目的根目录myproject/myproject/是项目的内容目录,项目的根URL配置文件,WSGI配置文件存放在这里。myproject/blog/和myproject/users/是项目的两个应用所在的目录。将blog和users的目录与myproject/myproject/并行放置而不是将它们放置在目录myproject/myproject/中的优点是:当您稍后要在应用程序中导入模块时,例如在博客应用程序中导入模型时,可以使用importblog.models代替importmyproject.blog.models,这样也方便应用独立复用。2、为每个环境设置单独的配置信息为项目的每个环境创建独立的配置文件,如本地开发dev、内测阶段、自动化流程环境jenkins、生产环境prod。在myproject/myproject目录下新建一个settings目录,在里面新建一个空的__init__.py。将myproject/myproject/settings.py文件移动到myproject/myproject/settings/目录下,重命名为base.py。此文件中的配置信息由所有其他环境中的配置文件共享。在myproject/myproject/settings/目录下创建4个文件dev.py、stage.py、jenkins.py和prod.py,每个文件包含如下一行代码:frombaseimport*这样,这些环境配置文件可以读取默认的配置项,然后可以在各自的配置文件中设置自定义的配置值。比如在本地开发环境,可以在dev.py中加上DEBUG=True**,在生产环境**prod.py**,可以设置DEBUG=False`。指定使用哪个配置文件:可以通过操作系统的环境变量指定,如:exportDJANGO_SETTINGS_MODELS="myproject.settings.prod"也可以通过命令行参数指定,如:./manage。pymigrate--settings=myproject.settings.prod或gunicorn-w4-b127.0.0.1:8001--settings=myproject.settings.prod3。修改INSTALLED_APPS默认的INSTALLED_APPS将是:INSTALLED_APPS=(...)你可以将元组()更改为列表[]:INSTALLED_APPS=[...]此外,我们可以将第三方(内置)应用程序分开来自我们自己的应用程序的INSTALLED_APPS,例如:users','blog',]INSTALLED_APPS=PREREQ_APPS+PROJECT_APPS这样分离之后,我们就只能测试和代码覆盖了。上面对INSTALLED_APPS的修改也可以对TEMPLATE_DIRS和MIDDLEMARE_CLASSES进行。4.调整pip需求项目一般都有一个requirements.txt文件,可以指定项目的依赖包。根据这个文件,可以使用如下命令自动安装依赖包:requirements.txt文件中的pipinstall-rrequirements.txt可以使用-rfilename来包含另一个文件的内容,这个功能类似于C语言中的#include。因此,我们可以把通用的依赖信息保存在myproject/requirements/base.txt文件中,针对不同的环境,将其保存在另一个文件中,比如测试环境,比如myproject/requirements/test.txt,里面的内容就可以了可能是:-rbase.txtpytest==2.5.2coverage==3.7.15。拆分测试文件在每个应用中创建一个包含测试内容的目录tests,将不同类别对应的测试分别保存在不同的文件中,如test_models.py、test_views.py等。这种分布相对于把所有测试代码都放的优点在单个文件中是代码更易于阅读,并且还减少了在编辑器中上下滚动所花费的时间。6.URL配置文件首先在每个应用中将各自的URL配置保存在urls.py中,然后通过include命令将子应用的URL配置信息包含在项目的根URL配置文件中:urlpatterns=patterns('',url(r'^$',HomePageView.as_view(),name='home'),url(r'^blog/',include('blog.urls')),url(r'^user/',包括('users.urls')),)7。模板和静态文件每个子应用都应该有自己的模板和静态文件目录,比如博客模板和静态文件目录位置应该是:myproject/blog/templates/blog/和myproject/blog/static/blog/。如果要覆盖子应用中的模板和静态文件,可以在项目根模板和根静态文件目录下创建同名文件。例如,要覆盖博客中的detail.html模板,您可以通过创建myproject/templates/blog/detail.html文件来覆盖默认模板文件。8.复用子应用如果想在另一个项目中复用博客应用,正确的方法是:提取博客应用,在每个项目中创建一个独立的代码库,在每个项目中使用pipinstall安装博客应用,使用pip更新依赖博客参考:http://www.revsys.com/blog/2014/nov/21/recommended-django-project-layout/