聚是一团火,散作满天星 【Django多项目合并】

阅读: 评论:0

聚是一团火,散作满天星 【Django多项目合并】

聚是一团火,散作满天星 【Django多项目合并】

在好莱坞大片变形金刚2中,有这么一个特别有意思的反派—大力神,由7种不同的狂派机甲合体而成,可直接吞噬金字塔,在打斗中又能直接解体成为机甲部队用来群攻。可想而知这种两用形态确实要比一般的厉害许多,无奈博派主角光环太强大(x) ok,步入正题,python框架Django中我们能不能将APP想象成大力神的机甲,但是问题来了,大力神的每个机甲都是可以单独战斗的 但是django的App却不能单独运行。由此可以想像一下:7个django项目,每个项目都能运行访问,他们组合成一个大项目,访问大项目的接口可以访问到7个小项目。So?能不能进行!

创建

以下事例用到了三个django单独的项目,重要的是捋清流程

#三个完整的项目
dj_one
dj_two
dj_three

要想每个项目能跑,肯定需要将每个项目配置好

#dj_one
#在项目子App中编写urls和views#urls.py
from . import views
f.urls import url
urlpatterns = [url(r'^v1/$', views.Index.as_view())
]#views.py
from django.views import View
from django.shortcuts import renderclass Index(View):def get(self,request):print("此处为V1")return render(request,'one_index.html',locals())#template one_index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Django1</title>
</head>
<body>
<h1>这是V1</h1>
</body>
</html>#主app中的urls.py
f.urls import url,include
ib import admin
urlpatterns = [url(r'^v1admin/', admin.site.urls),url(r"",include("dj_one.urls"))
]
#dj_two
#在项目子App中编写urls和views#urls.py
from . import views
f.urls import url
urlpatterns = [url(r'^v2/$', views.Index.as_view())
]#views.py
from django.views import View
from django.shortcuts import renderclass Index(View):def get(self,request):print("此处为V2")return render(request,'two_index.html',locals())#template two_index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Django2</title>
</head>
<body>
<h1>这是V2</h1>
</body>
</html>#主app中的urls.py
f.urls import url,include
ib import admin
urlpatterns = [url(r'^v2admin/', admin.site.urls),url(r"",include("dj_two.urls"))
]
#dj_three
#在项目子App中编写urls和views#urls.py
from . import views
f.urls import url
urlpatterns = [url(r'^v3/$', views.Index.as_view())
]#views.py
from django.views import View
from django.shortcuts import renderclass Index(View):def get(self,request):print("此处为V3")return render(request,'three_index.html',locals())#template one_index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Django3</title>
</head>
<body>
<h1>这是V3</h1>
</body>
</html>#主app中的urls.py
f.urls import url,include
ib import admin
urlpatterns = [url(r'^admin/', admin.site.urls),url(r"",include("dj_three.urls"))
]

现在3个项目都已创建好,并且运行都可以进行访问,第一步算是已经完成!

聚合

接下来聚合,利用dj_three作为主要框架,将dj_one、dj_two放入dj_three根目录

现在是将dj_three作为主项目,将另外两个项目作为APP

接下来在dj_three的主APP的urls中配置其余两个项目的路由

#dj_three/dj_three/urls.f.urls import url,include
ib import adminurlpatterns = [url(r'^admin/', admin.site.urls),url(r'',include('dj_one.dj_ones.urls')),url(r'',include('dj_two.dj_twos.urls')),url(r'',include('dj_threes.urls')),
]

这样一来dj_three就相当于多了两个APP

目前为止,dj_three还不能驱动另外两个项目,因为最关键的连接还没有做

连接

现在三个项目虽然已经在同一个文件夹中,但是各自还是独立的,所以需要配置d j_three的settings.py

#dj_three/settings.pyINSTALLED_APPS = [&#ib.admin',&#ib.auth',&#ib.contenttypes',&#ib.sessions',&#ib.messages',&#ib.staticfiles','dj_threes','dj_one.dj_ones','dj_two.dj_twos'
]TEMPLATES = [{'BACKEND': &#plate.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'dj_one/template'),os.path.join(BASE_DIR, 'dj_two/template'),os.path.join(BASE_DIR, 'template')],'APP_DIRS': True,'OPTIONS': {'context_processors': [&#t_processors.debug',&#quest',&#t_processors.auth',&#ssages',],},},
]#如果配置数据库
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3')},#(注意:这里的名字一定要和本体的名字对上,比如这里叫v1,那么dj_one的settings.py里面的就不能叫default,也得		  叫v1)'v1': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'dj_one/db.sqlite3')},'v2': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'dj_two/db.sqlite3')}
}

现在为止3个项目已经连接了,看到这里已经明白了,d j_three/settings.py就像是一个心脏,这颗心脏连接着3个项目,那么有的人可能会问,如果我以后要在单独的项目中加功能,那么本体settings和聚合的settings里面是不是都要配置。答案是肯定的,因为单体运行的同时 合体项目也要运行,那么就必须在两个settings中都配置

测试

启动dj_one、dj_two、dj_three,三个不同的端口,否则冲突

访问dj_one

访问dj_two

访问聚合过之后的dj_three

ok,所有项目既能单独访问又可以混合访问!

小结:

这种做法是为了方便将零散的项目聚合起来,除非是项目架构安排的特别合理的情况下可以这样做,否则不建议这样使用。因为在那种庞大的项目面前,如果不清楚配置的情况下只会徒增烦恼

另外admin控制台是每个项目中独有的,为了方便管理单个的项目,这样做还是比较合适的,聚合项目中的admin也只是管理自身的(毕竟大力神的手跟腿又不是一体的)

本文发布于:2024-01-31 08:18:37,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170666031927069.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:满天星   多项   一团火   Django
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23