[Python]Django 配置

news2024/11/17 16:02:54

文章目录

  • 🍉 pycharm中打开Django项目并配置虚拟环境运行项目
    • 🍈 打开项目后pycharm自动识别配置项目运行环境
      • 🍍 指定项目运行的端口号
    • 🍈 自行配置项目的运行环境
      • 🍍 配置项目的python解释器
      • 🍍 配置Django项目运行配置运行项目
      • 🍍 配置python运行脚本运行项目
  • 🍉 项目路径BASE_DIR
  • 🍉 密钥配置SECRET_KEY
  • 🍉 调试模式DEBUG
  • 🍉 域名访问权限ALLOWED_HOSTS
  • 🍉 子应用列表INSTALLED_APPS
  • 🍉 静态资源路由STATIC_URL
  • 🍉 静态资源集合STATICFILES_DIRS
  • 🍉 资源部署STATIC_ROOT
  • 🍉 媒体资源MEDIA
    • 🍈 媒体资源路由MEDIA_URL
    • 🍈 媒体资源路径MEDIA_ROOT
  • 🍉 配置模板文件夹templates
    • 🍈 项目模板文件夹
    • 🍈 子应用模板文件夹
  • 🍉 Django项目配置jinja2模板引擎
    • 🍈 安装 Jinja2
    • 🍈 配置jinja2模板引擎
    • 🍈 Django项目补充 Jinja2 模板引擎环境
  • 🍉 Django项目配置MySQL数据库
    • 🍈 PyMySQL连接MySQL数据库
    • 🍈 配置多个数据库
    • 🍈 使用配置文件动态连接数据库
    • 🍈 通过SSH连接MySQL
  • 🍉 中间件MIDDLEWARE
  • 🍉 Django项目配置Redis数据库
  • 🍉 添加项目的导包路径
  • 🍉 将Django项目全局配置文件用统一的包进行管理
  • Django项目配置工程日志


🍉 pycharm中打开Django项目并配置虚拟环境运行项目

在这里插入图片描述

🍈 打开项目后pycharm自动识别配置项目运行环境

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

🍍 指定项目运行的端口号

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

🍈 自行配置项目的运行环境

如果没有自动识别并配置项目的运行环境,可以手动为打开的django项目配置运行环境。

🍍 配置项目的python解释器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

🍍 配置Django项目运行配置运行项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

🍍 配置python运行脚本运行项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


🍉 项目路径BASE_DIR

项目路径BASE_DIR在创建项目时自动生成,一般情况下我们不需要进行修改。

创建项目时自动生成的项目路径BASE_DIR指向项目的根目录。

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
print(BASE_DIR)  # 查看BASE_DIR

在这里插入图片描述


🍉 密钥配置SECRET_KEY

密钥配置SECRET_KEY这是一个随机值,在项目创建时自动生成,一般情况下不用进行修改。

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-kja6l$dx5*zcpn^mfg&3o5dh7e*p3qd+d%6rf(1cd6=ob48u1c'

密钥配置SECRET_KEY主要用于重要数据的加密处理,提高项目的安全性,避免遭受攻击者恶意破坏。密钥配置SECRET_KEY主要用于用户密码、CSRF机制、会话Session等数据加密。

用户密码:Django内置一套Auth认证系统,该系统具有用户认证和存储用户信息等功能,在创建用户的时候,将用户密码通过密钥进行加密处理,保证用户的安全性。
CSRF机制:该机制主要用于表单提交,防止窃取网站的用户信息来制造恶意请求。
会话Session:Session的信息存放在Cookie中,以一串随机的字符串表示,用于标识当前访问网站的用户身份,记录相关用户信息。


🍉 调试模式DEBUG

该配置项的取值为布尔类型。

如果在开发调试阶段,该配置项应设置为True,在开发调试过程中会自动检测代码是否发生更改,根据检测结果执行是否刷新重启系统。

如果项目部署上线,该配置项应改为False,防止会泄漏项目的相关信息。

默认情况下,在创建项目之后,该配置项的取值默认为True。

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

🍉 域名访问权限ALLOWED_HOSTS

该配置项可以设置浏览器可以以什么域名访问到该Django项目,默认值为空列表。

ALLOWED_HOSTS = []

当DEBUG配置项的取值为True时,并且ALLOWED_HOSTS配置项为空列表时,该项目只允许以localhost或127.0.0.1在浏览器上访问。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如果当DEBUG配置项的取值为True时需要使得浏览器能够以其他ip地址或域名访问该Django项目,可以在ALLOWED_HOSTS配置项中添加相应的ip地址或域名,添加的ip地址或域名的形式为字符串类型。

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = [
    '10.1.109.25'
]

在这里插入图片描述

当DEBUG配置项的取值为False时,ALLOWED_HOSTS为必填项,否则程序无法启动。

# SECURITY WARNING: don't run with debug turned on in production!
# DEBUG = True
DEBUG = False

ALLOWED_HOSTS = []

在这里插入图片描述

DEBUG配置项的取值为False时,如果想允许浏览器以所有能访问到该项目的域名访问该Django项目,可以设置ALLOW_HOSTS = ['*']

# SECURITY WARNING: don't run with debug turned on in production!
# DEBUG = True
DEBUG = False

# ALLOWED_HOSTS = [
#     '10.1.109.25'
# ]
ALLOWED_HOSTS = ['*']

在这里插入图片描述
在这里插入图片描述

DEBUG配置项的取值为False时,如果只想允许某些ip地址或域名能够访问到该项目的ip地址或域名,在ALLOWED_HOSTS配置项中配置能访问到该项目的ip地址或域名即可。

# SECURITY WARNING: don't run with debug turned on in production!
# DEBUG = True
DEBUG = False

ALLOWED_HOSTS = [
    '10.1.109.25'
]
# ALLOWED_HOSTS = ['*']

在这里插入图片描述


🍉 子应用列表INSTALLED_APPS

该配置项用于告诉Django本项目有哪些子应用。

在项目创建时,该配置项默认已有admin、auth、sessions等配置信息。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

这些都是Django内置的应用功能,各个功能说明如下:
● admin:内置的后台管理系统。
● auth:内置的用户认证系统。
● contenttypes:记录项目中所有model元数据(Django的ORM框架)。
● sessions:Session会话功能,用于标识当前访问网站的用户身份,记录相关用户信息。
● messages:消息提示功能。
● staticfiles:查找静态资源路径。

如果在项目中创建了自己的子应用,就必须在子应用列表INSTALLED_APPS中添加自己创建的子应用的配置。

将项目中自己创建的子应用添加到子应用列表中,注册子应用,代码如下:

创建的子应用名为:test_app

# 写法一:
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
     # '子应用名'
    'test_app'  # 注册自定义子应用
]
# 写法二:
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # '子应用名.apps.apps中的类名'
    'test_app.apps.TestAppConfig'  # 注册自定义子应用
]

🍉 静态资源路由STATIC_URL

静态资源指的是网站中不会改变的文件,在一般的应用程序中,静态资源包括CSS文件、JavaScript文件以及图片等资源文件。静态资源的存放主要由配置文件settings.py中STATIC_URL配置项设置。

静态资源路由STATIC_URL是设置静态资源的路由地址,其作用是使浏览器能够通过路由访问Django的静态资源。

Django默认配置信息:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.1/howto/static-files/

STATIC_URL = 'static/'

默认配置下,Django只能识别项目子应用的static文件夹里面的静态资源。

由于配置文件中 STATIC_URL = 'static/',所以访问静态资源需要通过http://ip地址:端口号/static/静态资源路径进行静态资源的访问。

在test_app中创建static文件夹,并放置图片;在项目根目录下创建static文件夹,并放置图片。然后访问静态资源。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意,此时静态资源路由STATIC_URL只能为static/,且子应用中的静态资源文件夹的文件夹名只能为static,否则会找不到静态资源。

在这里插入图片描述
在这里插入图片描述


🍉 静态资源集合STATICFILES_DIRS

在配置文件settings.py中设置STATICFILES_DIRS配置项,我们可以通过该配置项告诉django本项目的静态资源的存放路径。该配置项的值为列表。

在STATICFILES_DIRS配置项中配置上述两个静态资源文件夹为项目静态资源的存放路径:

在这里插入图片描述

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.1/howto/static-files/

STATIC_URL = 'static/'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
    os.path.join(BASE_DIR, 'test_app/static1')
]

注意,访问静态资源时使用的url格式如下:http://ip地址:端口号/STATIC_URL取值/静态资源路径

在这里插入图片描述
在这里插入图片描述

在配置了STATICFILES_DIRS配置项之后,STATIC_URL配置项的取值可以任意取值,且也不用保证静态资源文件夹的文件夹名与STATIC_URL配置项的取值一致,只要STATICFILES_DIRS配置项中路径配置正确即可使用STATIC_URL配置项配置的路由访问静态资源,STATIC_URL设置的为浏览器访问静态资源时的路由。

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.1/howto/static-files/

STATIC_URL = 'hahaha/'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
    os.path.join(BASE_DIR, 'test_app/static1')
]

在这里插入图片描述
在这里插入图片描述


🍉 资源部署STATIC_ROOT

静态资源配置还有STATIC_ROOT,其作用是在服务器上部署项目,实现服务器和项目之间的映射。STATIC_ROOT主要是收集整个项目的静态资源并存放在一个新的文件夹,然后由该文件夹与服务器之间构建映射关系。

当项目的配置属性DEBUG设为True的时候,Django会自动提供静态文件代理服务,此时整个项目处于开发阶段,因此无须使用STATIC_ROOT。当配置属性DEBUG设为False的时候,意味着项目进入生产环境,Django不再提供静态文件代理服务,此时需要在项目的配置文件中设置STATIC_ROOT。

STATIC_ROOT配置如下:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.1/howto/static-files/

STATIC_URL = 'static/'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
    os.path.join(BASE_DIR, 'test_app/static1')
]

STATIC_ROOT = os.path.join(BASE_DIR, 'myStatic')

设置STATIC_ROOT需要使用Django操作指令collectstatic来收集所有静态资源,这些静态资源都会保存在STATIC_ROOT所设置的文件夹里。

python .\manage.py collectstatic

在这里插入图片描述
在这里插入图片描述

DEBUG配置项修改为False:

# SECURITY WARNING: don't run with debug turned on in production!
# DEBUG = True
DEBUG = False

# ALLOWED_HOSTS = [
#     '10.1.109.25'
# ]
ALLOWED_HOSTS = ['*']

后序补充


🍉 媒体资源MEDIA

对于一些经常变动的资源,通常将其存放在媒体资源文件夹,如用户头像、歌曲文件等。媒体资源和静态资源是可以同时存在的,而且两者可以独立运行,互不影响。

🍈 媒体资源路由MEDIA_URL

媒体资源的访问路由配置通过MEDIA_URL配置项进行配置。

在项目的根目录下创建media文件夹用于存放媒体资源,并放置图片:

在这里插入图片描述

在配置文件settings.py里设置MEDIA_URL配置项:

MEDIA_URL = 'media/'

🍈 媒体资源路径MEDIA_ROOT

MEDIA_ROOT配置项用于配置媒体资源文件夹media的路径信息。

在配置文件settings.py里设置MEDIA_ROOT配置项:

MEDIA_URL = 'media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

媒体资源配置完成后,还需要将media文件夹注册到Django里,让Django知道如何找到媒体文件,否则无法在浏览器上访问该文件夹的文件信息。

在项目的路由配置文件urls.py文件中,为媒体文件夹media添加相应的路由:

from django.contrib import admin
from django.urls import path, re_path
from test_app import views
# 导入用于配置媒体文件夹media的模块和方法
from django.views.static import serve
from django.conf import settings

urlpatterns = [
    path('admin/', admin.site.urls),
    path('test/', views.text),
    # 配置媒体文件夹media添加相应的路由
    re_path('media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT}, name='media'),
]

访问媒体资源进行测试:

在这里插入图片描述


🍉 配置模板文件夹templates

在Web开发中,模板是一种较为特殊的HTML文档。这个HTML文档嵌入了一些能够让Django识别的变量和指令,然后由Django的模板引擎解析这些变量和指令,生成完整的HTML网页并返回给用户浏览。

模板是Django里面的MTV框架模式的T部分,配置模板路径是告诉Django在解析模板时,如何找到模板所在的位置。

🍈 项目模板文件夹

在项目的根目录下新建用于存放模板文件的文件夹templates:

在这里插入图片描述

在项目配置文件settings.py文件中添加代码,查看BASE_DIR的指向:

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# Path(__file__).resolve().parent.parent:settings.py文件所在文件的上两级父级目录
print(BASE_DIR)

在这里插入图片描述

在项目配置文件setting.py中找到TEMPLATES配置项,修改TEMPLATES配置项中的DIRS,进行模板文件夹的配置:

记得导入os模块

TEMPLATES = [
    # Django 默认模板引擎
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # templates文件夹在项目的根目录下
        # BASE_DIR指向项目根目录
        # 所以模板文件夹的目录为BASE_DIR / templates
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

模板配置是以列表格式呈现的,每个元素的含义说明:
● BACKEND:定义模板引擎,用于识别模板里面的变量和指令。内置的模板引擎有Django Templates和jinja2.Jinja2,每个模板引擎都有自己的变量和指令语法。
● DIRS:设置模板所在路径,告诉Django在哪个地方查找模板的位置,默认为空列表。模板配置通常配置DIRS的属性值即可。
● APP_DIRS:是否在App里查找模板文件。默认为True。
● OPTIONS:用于填充在RequestContext的上下文(模板里面的变量和指令),一般情况下不做任何修改。

将模板文件夹templates进行标记:

在这里插入图片描述
在这里插入图片描述

🍈 子应用模板文件夹

创建子应用编写视图函数和路由以及模板文件进行测试:

templates/test.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>hello world</h1>
</body>
</html>

test_app/views.py

from django.shortcuts import render

# Create your views here.
def text(request):
    return render(request, 'test.html')

django_pro/urls.py

from django.contrib import admin
from django.urls import path
from test_app import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('test/', views.text)
]

在这里插入图片描述

一般情况下,项目根目录下的templates文件夹通常用于存放共用的模板文件,而对于每个子应用的模板文件夹,可以在项目的配置文件中的模板文件夹配置项中DIRS追加子应用模板文件夹的配置。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'templates'),
            os.path.join(BASE_DIR, 'test_app/templates') # 子应用模板文件夹路径
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

修改子应用的视图函数,新建子应用模板文件进行测试:

在这里插入图片描述

test_app/templates/testapp.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>testapp</h1>
</body>
</html>

test_app/views.py

from django.shortcuts import render

# Create your views here.
def text(request):
    print(request)
    return render(request, 'testapp.html')

在这里插入图片描述


🍉 Django项目配置jinja2模板引擎

🍈 安装 Jinja2

pip install jinjia2 -i https://pypi.tuna.tsinghua.edu.cn/simple 

🍈 配置jinja2模板引擎

在 settings.py 文件中找到项目默认的模板引擎配置项:

在这里插入图片描述

将原先的默认模板引擎配置修改为如下配置:

记得导入os模块,用于路径的拼接,import os

TEMPLATES = [
    # Jinja2模板引擎配置
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',  # 配置Jinja2模板引擎
        # BASE_DIR 指向项目根目录
        'DIRS': [os.path.join(BASE_DIR, 'templates')],  # 配置模板文件夹路径
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
    # Django 默认模板引擎
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

由于在模板引擎的配置项中配置模板文件的加载目录为:

'DIRS': [os.path.join(BASE_DIR, 'templates')],  # 配置模板文件夹路径

且 BASE_DIR 指向项目根目录:

在这里插入图片描述

在项目根目录下新建用于存放模板文件的目录 templates(只能使用这个目录名):

在这里插入图片描述

设置项目的模板语言:

在这里插入图片描述
在这里插入图片描述

将用于存放模板文件的目录 templates 标记为模板文件夹:

在这里插入图片描述

在这里插入图片描述

运行项目:

在这里插入图片描述


🍈 Django项目补充 Jinja2 模板引擎环境

由于在Jinja2模板引擎中,读取静态文件和进行重定向较为麻烦,所以需要进行Jinja2 模板引擎环境的补充。通过补充Jinja2 模板引擎环境实现Jinja2自动查找静态文件的路径,我们只需写相对路径即可;实现url()能够解析路由的命名空间实现重定向。

在项目根目录下新建用于管理项目工具文件的包文件夹:

在这里插入图片描述

新建Jinja2模板引擎环境的补充文件 jinja2_env.py:

在这里插入图片描述

在新创建的 jinja2_env.py 文件中补充 Jinja2 模板引擎的环境配置:

from jinja2 import Environment
from django.contrib.staticfiles.storage import staticfiles_storage
from django.urls import reverse


def jinja2_environment(**options):
    """jinja2 环境"""

    # 创建环境对象
    env = Environment(**options)

    # 自定义语法:{{ static('静态文件相对路径')}} {{ url('路由的命名空间')}}
    # 对全局的环境配置中 static url 对应的配置进行更新
    # update中接收的参数为字典
    env.globals.update({
        'static': staticfiles_storage.url, # 获取静态文件路径的前缀
        'url': reverse, # 模板中能够使用url()识别路由的命名空间实现重定向(反向解析)
    })

    # 返回环境对象
    return env

在项目配置文件中模板引擎配置项的OPTIONS配置中引入Jinja2模板引擎环境配置的补充文件:

TEMPLATES = [
    # Jinja2模板引擎配置
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',  # 配置Jinja2模板引擎
        # BASE_DIR 指向项目目录
        'DIRS': [os.path.join(BASE_DIR, 'templates')],  # 配置模板文件加载目录
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            # 补充 Jinja2 模板引擎环境
            # 'environment': 'utils.jinja2_env.jinja2_environment',
            'environment': 'utils.jinja2_env.jinja2_environment',
        },
    },
    # Django 默认模板引擎
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

运行项目:

在这里插入图片描述


🍉 Django项目配置MySQL数据库

🍈 PyMySQL连接MySQL数据库

找到全局配置文件 settings.py 中的DATABASES配置项:

在这里插入图片描述

将原先的配置修改为如下配置:

DATABASES = {
    # 'default': {
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': BASE_DIR / 'db.sqlite3',
    # }
    # 将使用的数据库修改为MySQL
    'default': {
        'ENGINE': 'django.db.backends.mysql', # 使用的数据库引擎修改MySQL
        'HOST': '127.0.0.1', # mysql数据库所在的主机
        'PORT': 3306, # mysql数据库监听的端口
        'USER': 'username', # 登录数据库的用户名
        'PASSWORD': '123456', # 登录数据库的密码
        'NAME': 'database', # 使用的数据库名
    }
}

安装PyMySQL:

pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple

使用 pymysql 替代默认的MySQL数据库驱动程序 MySQLdb,在项目配置文件存储目录下的__init__.py 文件中添加如下代码:

from pymysql import install_as_MySQLdb


install_as_MySQLdb()

在这里插入图片描述

执行数据库的迁移验证是否配置成功:

 python .\manage.py makemigrations

python .\manage.py migrate 

在这里插入图片描述
在这里插入图片描述

🍈 配置多个数据库

从Django单个数据库连接信息看到,配置项DATABASES的值是以字典的形式表示的,字典里的每一对键值代表连接某一个数据库。因此,我们可以在配置项DATABASES里设置多对键值对即可实现多个数据库连接。

DATABASES = {
    # 'default': {
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': BASE_DIR / 'db.sqlite3',
    # }
    # 第一个数据库
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 使用的数据库引擎修改MySQL
        'HOST': '127.0.0.1',  # mysql数据库所在的主机
        'PORT': 3306,  # mysql数据库监听的端口
        'USER': 'username',  # 登录数据库的用户名
        'PASSWORD': '123456',  # 登录数据库的密码
        'NAME': 'database1',  # 使用的数据库名
    },
    # 第二个数据库
    'user': {
        'ENGINE': 'django.db.backends.mysql', 
        'HOST': '127.0.0.1', 
        'PORT': 3306, 
        'USER': 'username', 
        'PASSWORD': '123456', 
        'NAME': 'database2',  
    },
    # 第三个数据库
    'sqlite': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

若项目中连接了多个数据库,则数据库之间的使用需要遵从一定的规则和设置。比如项目中定义了多个模型,每个模型所对应的数据表可以选择在某个数据库中生成,如果模型没有指向某个数据库,模型就会在key为default的数据库里生成。

🍈 使用配置文件动态连接数据库

一般,我们都是在settings.py配置文件中配置数据库的连接方式,但每次修改settings.py配置文件中的配置项都需要重新启动运行Django项目,否则修改内容就无法生效。当项目运行上线之后,为了保证在系统不中断的情况下切换到另一个数据库,可以将数据库的连接配置写到配置文件中,这样无须修改settings.py配置文件中的配置项即可达成顺利切换数据库的目的。

在项目配置文件存放目录下新建mysql.cnf配置文件:

在这里插入图片描述

在mysql.cnf配置文件中写入如下配置:

# mysql.cnf
# 配置文件my.cnf中必须设置[client],
# [client]在配置信息中代表分组的意思,
# 是将一个或多个配置信息划分到某一个分组里面。
# 在[client]里面,每个配置信息分别代表
# MySQL的数据库名称、用户名、密码、IP地址和端口信息。
[client]
database=testdb
user=root
password=123456
host=127.0.0.1
port=3306

修改项目配置文件settings.py中DATABASES配置项的配置:

# Database
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases

DATABASES = {
    # 默认数据库配置
    # 'default': {
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': BASE_DIR / 'db.sqlite3',
    # }
    # 连接mysql数据库配置
    # 'default': {
    #     'ENGINE': 'django.db.backends.mysql',  # 使用的数据库引擎修改MySQL
    #     'HOST': '127.0.0.1',  # mysql数据库所在的主机
    #     'PORT': 3306,  # mysql数据库监听的端口
    #     'USER': 'username',  # 登录数据库的用户名
    #     'PASSWORD': '123456',  # 登录数据库的密码
    #     'NAME': 'database',  # 使用的数据库名
    # },
    # 配置文件动态连接mysql数据库
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 使用的数据库引擎为MySQL
        'OPTIONS': {
            'read_default_file': str(os.path.join(BASE_DIR, 'django_pro/mysql.cnf')),
        }
    }
}

测试配置是否成功:
在子应用test_app/models.py中写入以下代码:

from django.db import models

# Create your models here.
class MyModel(models):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=20, blank=True)

进行数据库的迁移验证配置是否成功:

如果报错UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position 35: illegal multibyte sequence,是'read_default_file': str(os.path.join(BASE_DIR, 'django_pro/mysql.cnf')),读取文件使用的编码方式为gbk,而mysql.cnf
使用的编码方式不为gbk,把mysql.cnf的编码方式修改gbk即可。
pycharm右下角
在这里插入图片描述

python .\manage.py makemigrations

python .\manage.py migrate 

在这里插入图片描述
在这里插入图片描述

🍈 通过SSH连接MySQL

如果数据库所在的服务器禁止了外网直连,只允许通过SSH方式连接服务器,再从已连接服务器的基础上连接数据库。

安装sshtunnel:

该模块能通过SSH方式连接到目标服务器,生成服务器的SSH连接对象,然后在Django的配置文件settings.py的DATABASES中设置数据库连接

pip install sshtunnel -i https://pypi.tuna.tsinghua.edu.cn/simple

在settings.py配置文件中进行如下配置:

# 带有ssh_开头的配置信息是实现SSH连接目标服务器,主要在sshtunnel模块中使用。
# 带有mysql_开头的配置信息是在目标服务器基础上连接MySQL数据库

ssh_host = '127.0.0.1'  # 服务器的ip或主机名
ssh_port = 22  # ssh连接服务器的端口号,一般为22
# 可以登录服务器主机的用户
ssh_user = 'cw'  # 连接服务器的用户名
ssh_password = '123456'  # 连接服务器的密码

mysql_host = 'localhost'  # mysql在服务器主机上
mysql_port = 3306  # 连接mysql的端口号,一般为3306
# 服务器上可以登录mysql的用户
mysql_user = 'root'  # 连接mysql的用户名
mysql_password = '123456'  # 连接mysql的密码
mysql_db = 'testdb'  # mysql数据库名

from sshtunnel import open_tunnel
def get_ssh():
    server = open_tunnel(
        (ssh_host, ssh_port),
        ssh_username=ssh_user,
        ssh_password=ssh_password,
        remote_bind_address=(mysql_host, mysql_port)
    )
    server.start()
    return server.local_bind_port

BATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 使用的数据库引擎MySQL
        'NAME': mysql_db,  # 使用的数据库名
        'USER': mysql_user,  # 登录数据库的用户名
        'PASSWORD': mysql_password,  # 登录数据库的密码
        'HOST': mysql_host,  # mysql数据库所在的主机
        'PORT': get_ssh(),  # mysql数据库监听的端口
    }
}

Django使用SSH连接服务器的MySQL过程如下:
(1)分别定义服务器的SSH连接信息和数据库的连接信息。
(2)定义服务器的SSH连接函数get_ssh(),使用sshtunnel模块的open_tunnel函数实现,并设置相应的函数参数,其中参数remote_bind_address是绑定服务器的MySQL数据库。
(3)在配置属性DATABASES的PORT调用get_ssh(),Django自动根据DATABASES的PORT连接到服务器的MySQL数据库。


🍉 中间件MIDDLEWARE

中间件(Middleware)是一个用来处理Django的请求(Request)和响应(Response)的框架级别的钩子,它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。

配置文件settings.py中MIDDLEWARE配置项的数据类型为列表类型。

注意,每个中间件的设置顺序是固定的,如果随意变更中间件,就很容易导致程序异常

创建Django项目之后,Django会默认配置一些中间件:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

● SecurityMiddleware:内置的安全机制,保护用户与网站的通信安全。
● SessionMiddleware:会话Session功能。
● CommonMiddleware:处理请求信息,规范化请求内容。
● CsrfViewMiddleware:开启CSRF防护功能。
● AuthenticationMiddleware:开启内置的用户认证系统。
● MessageMiddleware:开启内置的信息提示功能。
● XFrameOptionsMiddleware:防止恶意程序单击劫持。

中间件的执行流程:
在这里插入图片描述


🍉 Django项目配置Redis数据库

django 配置 redis 文档:django-redis 中文文档

安装 django-redis 包

pip install django-redis -i https://pypi.tuna.tsinghua.edu.cn/simple

在项目全局配置文件中新增CACHES配置项配置 redis 数据库:

与DATABASES平级

# 配置redis数据库
CACHES = {
    "default": {  # 默认使用的redis数据库
        # 使用redis作为缓存
        "BACKEND": "django_redis.cache.RedisCache",
        # redis 数据库所在的主机地址 端口号 选择第几个数据库
        "LOCATION": "redis://127.0.0.1:6379/0",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "PASSWORD": "123123",  # 访问redis数据库的密码
        }
    },
    # 分库存储不同的信息
    # session 数据存在的redis数据库配置
    "session": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "PASSWORD": "123123",  # 访问redis数据库的密码
        }
    },
}
# 配置session数据存储的redis数据库
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "session"

运行项目:

在这里插入图片描述



🍉 添加项目的导包路径

在项目的全局配置文件中打印查看项目的导包路径:

import sys


print(sys.path)  # 查看项目当前的导包路径
print(BASE_DIR)

在这里插入图片描述

接下来准备把项目配置文件存放目录(BASE_DIR指向的目录)作为子应用的导包路径,即将子应用创建在项目目录下。由于导包路径中没有指向项目目录的路径,而BASE_DIR又指向项目目录,所以将BASE_DIR加入导包路径中。

from pathlib import Path
import os
import sys


# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent
# 新增导包路径
sys.path.insert(0, os.path.join(BASE_DIR))
print(sys.path)  # 查看项目当前的导包路径
print(BASE_DIR)

在这里插入图片描述

在pycharm中将项目目录标记为导包的根目录:

在这里插入图片描述
在这里插入图片描述

在项目目录中新建apps包由于存放子应用:

在这里插入图片描述


🍉 将Django项目全局配置文件用统一的包进行管理

由于 manage.py 中第九行的代码:

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'test_pro01.settings')

Django项目默认的开发环境的配置文件为项目配置文件存放目录下的 settings.py 文件。

在项目配置文件存放目录下新建用于管理项目配置文件的包 settings:

在这里插入图片描述

将项目的配置文件移动到用于管理项目配置文件的包中:

在这里插入图片描述

修改 manage.py 文件中项目全局配置文件导入的代码(第九行):

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'test_pro01.settings.settings')

运行项目:

在这里插入图片描述


Django项目配置工程日志


🍇🍈🍑🍒🍓🍉🍊🍋🥝🍅🍌🍍🥭🍎🥑🥥🍆🍏🍐🥔🥜🧅🧄🥦🥬🥒🌶🌽🥕🌰

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/30158.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

本地demo服务器搭建计划——(三)rabbitmq配置中心config配置自动刷新

本章内容主要使用Spring Cloud Config来启动一个配置中心服务&#xff0c;通过Spring Cloud Bus消息总线&#xff08;依赖rabbitmq&#xff09;和Git仓库&#xff08;Gitee&#xff09;Webhook钩子函数来实现配置的自动更新&#xff08;push新的配置到gitee仓库时触发&#xff…

【英语口语】单词如何正确发音?

1. 发音基础介绍 音素&#xff1a;元音 辅音 单词&#xff1a;重音 失去爆破 浊化 三单 过去式过去分词 句子&#xff1a;语调 重音 弱读 连读 缩读 段落&#xff1a;意群 元音字母&#xff1a; A、E、I、O、U 2. 音节的定义 英语单词在发音的时候&#xff0c;不是一个字…

GD32F4(9):GD32f4出现上电不工作,必须按复位程序才能跑起来

GD32&#xff1a;上电不工作&#xff0c;需要按一下复位按键程序才能跑起来 文章目录GD32&#xff1a;上电不工作&#xff0c;需要按一下复位按键程序才能跑起来1.问题描述2. 我的调试思路2.1 第一步&#xff0c;排除电源问题2.2 第二步&#xff0c;排除复位电路的问题2.3 第三…

QUIC简介

一、概述、 QUIC&#xff08;Quick udp Internet connection&#xff09;&#xff1a;快速UDP互联网协议。相比于当前广泛应用的http2tcptls有如下优势&#xff1a; 减少三次握手及TLS握手时间&#xff1b;改进拥塞机制&#xff1b;避免队头阻塞的多路复用&#xff1b;连接迁移…

一文了解riscv软件系列之linux内核编译运行

一、交叉编译工具链的安装 【推荐阅读文章】 代码大佬的【Linux内核开发笔记】分享&#xff0c;前人栽树后人乘凉&#xff01; 一篇长文叙述Linux内核虚拟地址空间的基本概括 一文了解Linux内核的Oops 需要多久才能看完linux内核源码&#xff1f; 详细讲解磁盘及文件系统…

【antd vue pro】设置项目默认语言为中文:

文章目录一、官网文档&#xff1a;二、解决&#xff1a;1、在src\locales\index.js文件修改默认语言2、src\core\bootstrap.js文件&#xff0c;修改初始化的语言3、src\store\modules\app.js4、清空本地存储&#xff0c;然后npm run serve重启&#xff1a;5、遇到问题&#xff…

Linux文件权限管理:chomd命令和chown命令

Linux文件权限管理&#xff1a;chomd命令和chown命令前言介绍文件类型文件权限文件所属文件信息chomd命令chown命令前言 在服务器部署项目、安装应用会经常涉及到文件权限的问题&#xff0c;在此记录chomd命令和chown命令它们的用法及区别。 介绍 以下图为例&#xff0c;进行…

如何解决全局工业相机飞拍拖影问题

1.问题描述: 物体静态拍摄时图像正常&#xff0c;但是动态拍摄时会有拖影现象。 2.问题原因&#xff1a; 只要物体存在运动&#xff0c;拍摄就一定会存在拖影&#xff0c;那么如何判断飞拍项目能否使用&#xff1f;拖影是否会对飞拍造成影响呢&#xff1f;这就要看具体的检测…

Viterbi维特比译码误码率仿真,调制为QPSK,信道为高斯白噪声

目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 整体思路如图1中所示&#xff0c; 其中输入序列使用randn函数来产生&#xff0c;卷积也采用matlab本身的函数conv&#xff0c;加性高斯白噪声用wgn函数来产生&#xff0c;由于实验的重点…

世上最全NVDIA GPU参数列表: 3090,4090, A40, A30,V100, A100, A800性能参数

-1&#xff09;GeForce RTX 4090 GeForce RTX 4090 GPU 引擎规格&#xff1a;NVIDIA CUDA 核心数量16384加速频率 (GHz)2.52基础频率 (GHz)2.23显存规格&#xff1a;标准显存配置24 GB GDDR6X显存位宽384 位技术支持&#xff1a;Ray Tracing Core第 3 代Tensor Cores第 4 代N…

CRDB-多区域部署

多区域部署允许cockachdb数据库跨越多个地理区域。多区域部署的配置对集群的容错和区域性能有影响。一般来说&#xff0c;我们将一个cockachdb集群配置为多个区域&#xff0c;以实现以下两个目标中的一个或两个&#xff1a; 允许集群在其中一个区域的计算资源不可用时继续服务…

磨金石教育摄影技能干货分享|花朵怎样拍才能不凌乱

喜欢养花种花的朋友&#xff0c;除了享受花朵在自己精心培育下绽放之外&#xff0c;给爱花拍照发在朋友圈炫耀也是一大乐趣之一。 但是别看花朵静静地盛开&#xff0c;娇艳欲滴&#xff0c;想要拍得好看却不是一件容易的事。作为摄影小白常常遇到的情况就是&#xff0c;拍出的花…

即兴发言怎样避免语无伦次?记住这个即兴发言万能公式

作为PMO和项目经理&#xff0c;经常要组织和参与各种会议&#xff0c;在会议中难免需要即兴发言&#xff0c;但是很多人即兴发言时总语无伦次&#xff0c;不知所云&#xff0c;而PMO和项目经理又是依靠外在表现来体现自己的专业性的&#xff0c;这时候就很难获得被人的认可&…

Docker Desktop Installer 安装无反应的,如何解决?

docker教程 Docker 教程 | 菜鸟教程 下载地址&#xff1a; Docker Desktop 官方下载地址&#xff1a; Install on Windows | Docker DocumentationHow to install Docker Desktop for Windowshttps://docs.docker.com/desktop/install/windows-install/ 问题&#xff1a;出…

webpack

webpack一、前端工程化1、前端开发历程2、什么是前端工程化3、前端工程化的解决方案二、webpack的基本使用1、什么是webpack2、列表隔行变色例子3、安装和配置webpack1.安装webpack2.配置webpack4、webpack.config.js的作用5、配置webpack.config.js自定义打包入口和出口三、we…

乘用车排气系统流场的数值模拟

目 录 摘 要 I Abstract II 第1章 绪论 1 1.1 课题背景及意义 1 1.2 国内外研究现状 1 1.3 课题主要研究内容 2 第2章 流体力学及流场分析软件的介绍 4 2.1 概述 4 2.2 流体力学及应用现状 4 2.3 Solidworks软件的应用范围 5 2.4 Flow Simulation 软件简介 5 第3章 排气系统理论…

软件测试的行业现状,我们的未来在哪里?

1.现状 1.1建立软件测试团队的公司规模 可看出主要当前是以中小型公司为主&#xff0c;因为大厂毕竟就那么几个&#xff0c;数量少。 1.2软件测试团队的规模 可看出主要目前的软件测试团队主要是以50人以内的团队为主(外包除外)。 1.3各公司软件测试工作的规范程度 可看出大…

优化器scipy.optimize参考指南

原文&#xff1a;https://mp.weixin.qq.com/s/BDHXQHXSzDk-RTi-VNMNEw 1 scipy.optimize简介 该scipy.optimize包提供几种常用的优化算法。 该模块包含&#xff1a; 1、使用多种算法&#xff08;例如BFGS&#xff0c;Nelder-Mead单形&#xff0c;牛顿共轭梯度&#xff0c;C…

在线预约系统开发的用途_分享在线预约小程序的作用

在微信小程序上进行在线预约&#xff0c;不管是商家还是顾客&#xff0c;都可以自由选择时间&#xff0c;顾客还可以通过预约小程序&#xff0c;了解到所选服务的详情和功能特色&#xff0c;不必等到去店内听介绍&#xff0c;顾客能节省等候时间&#xff0c;商家能解放招待人力…

【34-业务开发-基础业务-属性组和基本属性-属性组和基本属性建立关联-属性组和基本属性解除关联-未关联属性查询-确认新增】

一.知识回顾 【0.三高商城系统的专题专栏都帮你整理好了&#xff0c;请点击这里&#xff01;】 【1-系统架构演进过程】 【2-微服务系统架构需求】 【3-高性能、高并发、高可用的三高商城系统项目介绍】 【4-Linux云服务器上安装Docker】 【5-Docker安装部署MySQL和Redis服务】…