import sys
# 存放其他app的文件夹,名字叫apps
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app1',
    # 注册app2
    'app2',

4. app2的urls.py

在app2中新建urls.py:

from django.conf.urls import url
from django.urls import path, include
from app2 import views
urlpatterns = [
    url(r'^$', views.hello),

5. app1的urls.py

在app1中的urls.py中加入:

# 自行对照views.py修改
urlpatterns = [
    url(r'^$', views.hello),
    path('app2/', include("apps.app2.urls")),
    path('index/', views.show),
    path('test/', views.test),

关联不同数据库

1. 数据库路由

在主app(app1)中创建一个新文件 database_router.py

#!/usr/bin/env python
# coding:utf8
from django.conf import settings
DATABASE_MAPPING = settings.DATABASE_APPS_MAPPING  # 在setting中定义的路由表
class DatabaseAppsRouter(object):
    def db_for_read(self, model, **hints):
        if model._meta.app_label in DATABASE_MAPPING:
            return DATABASE_MAPPING[model._meta.app_label]
        return None
    def db_for_write(self, model, **hints):
        if model._meta.app_label in DATABASE_MAPPING:
            return DATABASE_MAPPING[model._meta.app_label]
        return None
    def allow_relation(self, obj1, obj2, **hints):
        db_obj1 = DATABASE_MAPPING.get(obj1._meta.app_label)
        db_obj2 = DATABASE_MAPPING.get(obj2._meta.app_label)
        if db_obj1 and db_obj2:
            if db_obj1 == db_obj2:
                return True
            else:
                return False
        return None
    def allow_syncdb(self, db, model):
        if db in DATABASE_MAPPING.values():
            return DATABASE_MAPPING.get(model._meta.app_label) == db
        elif model._meta.app_label in DATABASE_MAPPING:
            return False
        return None
    def allow_migrate(self, db, app_label, model_name=None, **hints):
        if db in DATABASE_MAPPING.values():
            return DATABASE_MAPPING.get(app_label) == db
        elif app_label in DATABASE_MAPPING:
            return False
        return None

2. settings.py

在settings.py中写入:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        # app1对应的数据库文件路径
        'NAME': os.path.join(BASE_DIR, 'app1.db'),
    'app2db': {
        'ENGINE': 'django.db.backends.sqlite3',
        # app2对应的数据库文件路径
        'NAME': os.path.join(BASE_DIR, 'app2.db'),
DATABASE_ROUTERS = ['app1.database_router.DatabaseAppsRouter']
DATABASE_APPS_MAPPING = {
    # 关联数据库:
    # 'app_name':'database_name',
    'app1': 'default',
    'app2': 'app2db',

3.调用数据库

在业务逻辑中直接调用数据库

# App2是app2中的一个model类名,自行编写models.py完成数据库表的映射
res = App2.objects.using('app2db').all().values('id')
				
1、创建第二个app 假设我们项目P下面已经有了一个默认的app,名字是app1。现在我想创建第二个app,名字时app2。 进入pychram下的Terminal中,运行命令: python manage.py startapp app2 此外,我在每个app下都建立一个urls.py,方便区分。 右击app名,点击“new”,选择“Python File”,命名为urls,确定。 2、设置url.py (1)设置P\urls.py 引入app2下的urls,然后添加引导路径。具体代码如下: from app2 import urls as app2_urls urlpatterns
'NAME': 'app_data', 'ENGINE': 'django.db.backends.postgresql', 'USER': 'postgres_user', 'PASSWORD': 's3krit' 'users': { 'NAME': 'user_data', 'ENGINE': 'django.db.backends.mysql' 1、在pycharm中新建一个管理apppython package目录(例如apps) 2、将存在的app用拖拽到apps目录下,此时会弹出对话框,取消勾选Search for references 3、鼠标右击apps目录,选择mark directory as—-选择sources root 4、在项目set
如果你的 Django 项目中有多个应用(app),你可以在 Django 的设置文件(settings.py)中的 INSTALLED_APPS 选项中添加这些应用的名称。这样,Django 就会知道你的项目中有哪些应用,它会自动加载这些应用。 例如,如果你的项目中有一个名为 blog 的应用和一个名为 news 的应用,你可以在 INSTALLED_APPS 中添加这些应用的名称,如下所示:
假设在项目中有app01和app02两个应用,两个应用的models.py文件中分别有User和Book两个类,要将app02中Book类的author字段设置外键,与app01中的User类关联起来,方法如下: 1、首先在app02的models.py文件中引入User,如下: from app01.models import User 2、设置外键字段为: author = models.ForeignKey(to=User,on_delete=models.CASCADE) 这其中需要注意的是,U
我以我个人的Mynote工程说明,目的是要在backend这个app里面设置不同的model对应daysn和bear两个数据库进行操作 现在我们先简单对一个完全新建的django工程配置一个自动在mysql生成表的这么一个东西, 配置setting 然后随便写个model E:\大数据\DjangoMyNote\Mynote>python manage...
多模块应用可以根据功能划分成各个子应用,每个子应用可以采用MVC(Model-View-Controller)的架构模式,把数据、业务逻辑和用户界面分开。例如,可以分成以下几个子应用: 1. 用户注册和登录模块 2. 商品管理模块 3. 订单管理模块 4. 支付和结算模块 5. 分享和社交模块 在Django中,每个子应用都应有一个独立的文件夹,包含自己的模型、视图、模板、静态文件等,通常按照以下目录结构组织: |- project/ |- manage.py |- project/ |- __init__.py |- settings.py |- urls.py |- wsgi.py |- app1/ |- __init__.py |- admin.py |- apps.py |- models.py |- tests.py |- urls.py |- views.py |- templates/ |- app1/ |- static/ |- app1/ |- app2/ |- ... 其中,每个子应用的`models.py`文件定义该子应用所需的数据库模型,`views.py`文件实现业务逻辑,`urls.py`文件指定URL路由和视图函数的映射关系,`templates/`和`static/`目录存放该子应用所需的模板和静态文件。 在`project/settings.py`文件中,可以配置`INSTALLED_APPS`变量,将每个子应用添加到Django项目中。例如: INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app1', 'app2', 这样,Django会自动扫描每个子应用的`models.py`文件,并在数据库中创建相应的数据表。同时,Django也会自动路由每个子应用的URL,并调用相应的视图函数进行处理。