总结 Django 一个项目构建多个应用

时间:2024-03-22 19:49:44

单个项目,多个应用的需求是很常见的,总结下如何建立:

项目:learning_log

3个应用:Learning_logs, meal_apps, pizzas

1,把多个apps目录组织好

比如多个apps folders(Learning_logs, meal_apps, pizzas)与project_folder (learning_log)平行,不能放进子目录

总结 Django 一个项目构建多个应用

这里,manage.py 指向了 learning_log 里的setting.py.

2,Project_folder\setting.py 添加多个app

INSTALLED_APPS = [

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',

    'learning_logs',

'pizzas',

‘meal_apps’,

]

3,Project_folder\urls.py

分别定义apps' URLs.

from django.contrib import admin

from django.urls import path

from django.conf.urls import url, include  

from learning_logs.views import index #指定默认index 从learning_logs app来

 

urlpatterns = [

    path('admin/', admin.site.urls),

    url(r'^$',index,name='index'),

   # url(r'', include(('learning_logs.urls','learning_logs'), namespace ='learning_logs')), 

    url(r'pizzas/', include(('pizzas.urls','pizzas'), namespace='pizzas')),

    url(r'learning_logs/', include(('learning_logs.urls','learning_logs'), namespace ='learning_logs')),  

    url(r'meal_apps/', include(('meal_apps.urls','meal_apps'), namespace='meal_apps')),   

]]

4,Apps 的models.py, admin.py分别管理,保持不变,

分别的models.py 结构会自动建立到数据库中,数据也会存储在同一个数据库文件中,即manage.py 同目录的那个db.sqlite3。并不需要一个models.py里包含所有apps的models。这个还是挺神奇和方便的,用shell 访问验证过。

同理,分别的admin.py 独立维护,Admin界面会自动综合多个admin.py 注册的models,用于管理。

总结 Django 一个项目构建多个应用

5,Apps 的 urls.py,views.py各自定义,app间保持独立

跟普通单个app一样,自身一致即可。

6,Apps 的 templates 子目录下层目录名最好跟app 同名,

这样避免重复,养成好习惯。如

C:\Users\ThinkPad\tmp\virtual_env\pizzas\templates\pizzas

C:\Users\ThinkPad\tmp\virtual_env\meal_apps\templates\meal_apps

否则调用时,如遇子目录重名,网页内容会串!!

并与view.py保持一致,

def index(request):

return render(request,'pizzas/index.html')

7,Apps 的 子html模板,可以继承主应用的base.html这样方便统一设计。

比如:C:\Users\ThinkPad\tmp\virtual_env\pizzas\templates\pizzas\topic.html 继承主应用learning_logs的base.html

{% extends "learning_logs/base.html"%}

总体感觉,Django MVC结构还是很友好、灵活的。有兴趣可以看【脑图】Django MVC 篇