Django 常用配置笔记

2021-12-06 20:38:36 浏览数 (1)

引言

在进行 Django Web 开发 的时候有许多东西要配置, 配置的东西一多就容易忘记不会配,这里做一个常用配置的笔记方便查阅。当然我们也要会查阅官方文档,毕竟阅读文献也是一种技能。 官方文档 https://docs.djangoproject.com/en/3.1/ref/settings

在配置 Django 项目环境的时候,先自己打印 BASE_DIR 看看路径指向哪,因为会用到很多次这个 BASE_DIR ,了解这个 BASE_DIR 基目录,好在其他配置中使用到更好理解。

代码语言:javascript复制
# settings.py or develop.py
import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

print(BASE_DIR)

# 以我个人举例
# C:UsersAdministratorDesktopmeiduo_projectmeiduo_mallmeiduo_mall

配置开发环境

项目的环境一般分为**开发环境生产环境**。

  • 开发环境:用于编写和调试项目代码。
  • 生产环境:用于项目线上部署运行。

1. 新建配置文件

  1. 准备配置文件目录
    • 新建包,命名为 settings,作为配置文件目录
  2. 准备开发和生产环境配置文件
    • 在配置包 settings 中,新建开发 develop.py 和生产 product.py 环境配置文件
  3. 准备开发环境配置内容
    • 将默认的配置文件 settings.py 中内容分别拷贝至 develop.py, product.py

2. 指定开发环境配置文件

在项目下的 manage.py 中修改成如下

代码语言:javascript复制
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "meiduo_mall.settings.develop")
代码语言:javascript复制
#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    # 在这里设置开发环境配置文件
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "meiduo_mall.settings.develop")
    try:
        from django.core.management import execute_from_command_line
    except ImportError:
        # The above import may fail for some other reason. Ensure that the
        # issue is really that Django is missing to avoid masking other
        # exceptions on Python 2.
        try:
            import django
        except ImportError:
            raise ImportError(
                "Couldn't import Django. Are you sure it's installed and "
                "available on your PYTHONPATH environment variable? Did you "
                "forget to activate a virtual environment?"
            )
        raise
    execute_from_command_line(sys.argv)

3. 指定生产环境配置文件

在项目下的 uwsgi.py 中改成如下所示:

代码语言:javascript复制
import os

from django.core.wsgi import get_wsgi_application

# 在这里设置生产环境配置文件
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "meiduo_mall.settings.product")

application = get_wsgi_application()

注意:这里的生产环境配置文件,先和开发环境一致,到项目部署的时候还需修改。

配置Jinja2模板引擎

Django 默认模板引擎替换成 Jinja2 模板引擎。

1. 安装Jinja2扩展包

代码语言:javascript复制
pip install Jinja2

2. 配置Jinja2模板引擎

代码语言:javascript复制
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',  # jinja2模板引擎
        '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',
            ],
        },
    },
]

3. 补充Jinja2模板引擎环境

1、新建一个 utils Python包然后创建Jinja2模板引擎环境配置文件 jinja2_env.py

2、编写Jinja2模板引擎环境配置代码

代码语言:javascript复制
# !/usr/bin/python3
# -*- coding: utf-8 -*-
# @Author: Hui
# @Desc: { Jinja2模板引擎环境配置模块 }
# @Date: 2021/05/20 16:33

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


# 确保可以使用模板引擎中的{{ url('') }} {{ static('') }}这类语句
def jinja2_environment(**options):
    env = Environment(**options)
    env.globals.update({
        'static': staticfiles_storage.url,
        'url': reverse,
    })
    return env

3、加载 Jinja2 模板引擎环境

代码语言:javascript复制
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',  # jinja2模板引擎
        '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': 'meiduo_mall.utils.jinja2_env.jinja2_environment', 
        },
    },
]

数据库配置

setting.py 模块中找到 DATABASES 配置选项进行配置

SQLite3(默认)

代码语言:javascript复制
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

MySQL

代码语言:javascript复制
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',	# MySQL数据库引擎
        'HOST': '127.0.0.1',    	# 数据库地址,本机 ip 地址 127.0.0.1
        'PORT': 3306,               # 数据库端口
        'USER': 'root',             # 数据库用户名
        'PASSWORD': '123456',       # 数据库密码
        'NAME': 'BMSTest',          # 数据库名称
    }
}

数据库 ENGINE

要使用的数据库引擎。内置数据库引擎包括:

  • 'django.db.backends.postgresql'
  • 'django.db.backends.mysql'
  • 'django.db.backends.sqlite3'
  • 'django.db.backends.oracle'

静态文件目录

Djangosetting.py 配置文件中默认没有 静态文件目录 的配置选项,因此需要我们自己在 setting 文件中手动添加 STATICFILES_DIRS 配置项

代码语言:javascript复制
# 设置访问静态文件的url前缀
STATIC_URL = '/static/'

# 设置静态文件存放的目录
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

国际化

代码语言:javascript复制
# LANGUAGE_CODE = 'en-us'		# 英文

# TIME_ZONE = 'UTC'				# 世界标准时间

LANGUAGE_CODE = 'zh-hans'		# 中文

TIME_ZONE = 'Asia/Shanghai'		# 中国时区

USE_I18N = True

USE_L10N = True

USE_TZ = True

缓存配置

setting.py 中添加 CACHES 配置项

代码语言:javascript复制
# Django的缓存配置
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
    }
}

BACKEND

要使用的缓存后端。内置缓存后端包括:

  • 'django.core.cache.backends.db.DatabaseCache'
  • 'django.core.cache.backends.dummy.DummyCache'
  • 'django.core.cache.backends.filebased.FileBasedCache'
  • 'django.core.cache.backends.locmem.LocMemCache'
  • 'django.core.cache.backends.memcached.MemcachedCache'
  • 'django.core.cache.backends.memcached.PyLibMCCache'

可以通过将 BACKEND 设置为缓存后端类的完全限定路径,即可以使用不与 Django 一起内置的缓存后端

Django-Redis-Session 配置

Django 的默认缓存改成 Redis 缓存,并修改 session 存储机制为 redis 缓存 参考:Django-Redis中文文档 https://django-redis-chs.readthedocs.io/zh_CN/latest/

1、安装 django-redis 扩展包

代码语言:javascript复制
pip install django-redis==4.4.0

安装扩展包的时候最好指定版本,对应 Django 版本。不然会安装最新版本,导致和 Django 版本对不上,它会自动卸掉 Django旧版本,然后安装与之对应的版本。 这样就破坏了之前准备的 Django 开发环境。

  • django-redis 3.8.x 支持 django 1.4, 1.5, 1.6, 1.7 (或许会有 1.8)
  • django-redis 4.4.x 支持 django 1.6, 1.7, 1.8, 1.91.10

具体配置参考:Django-Redis中文文档 https://django-redis-chs.readthedocs.io/zh_CN/latest/

2、配置 Redis 数据库

代码语言:javascript复制
# 缓存
CACHES = {
    # 默认采用0号Redis库。
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/0",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },

    # session, 采用1号Redis库
    "session": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },
}

使用 Redis 数据库作为 Django 的缓存数据库

修改 session 存储机制为 redis 缓存

代码语言:javascript复制
# 配置Session存储
SESSION_ENGINE = "django.contrib.sessions.backends.cache"

# session缓存别名
SESSION_CACHE_ALIAS = "session"

再配置了 SESSION_ENGINESESSION_CACHE_ALIAS ,这两个配置项,Session 信息也会保存到 Redis 数据库中。

配置工程日志

develop.py 开发环境中设置 LOGGING 选项来配置工程日志。

代码语言:javascript复制
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,  # 是否禁用已经存在的日志器
    'formatters': {  # 日志信息显示的格式
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s'
        },
        'simple': {
            'format': '%(levelname)s %(module)s %(lineno)d %(message)s'
        },
    },
    
    # 对日志进行过滤
    'filters': {  
        'require_debug_true': {  # django在debug模式下才输出日志
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    
    # 日志处理方法
    'handlers': {
        
        # 向终端中输出日志
        'console': {  
            'level': 'INFO',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
        },
        
        # 向文件中输出日志
        'file': {  
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
            
             # 日志文件的位置
            'filename': os.path.join(os.path.dirname(BASE_DIR), 'logs/meiduo.log'),  
            'maxBytes': 300 * 1024 * 1024,
            'backupCount': 10,
            'formatter': 'verbose'
        },
    },
    
    # 日志器
    'loggers': {  
        'django': {  # 定义了一个名为django的日志器
            'handlers': ['console', 'file'],  # 可以同时向终端与文件中输出日志
            'propagate': True,  # 是否继续传递日志信息
            'level': 'INFO',  # 日志器接收的最低日志级别
        },
    }
}

准备日志文件目录

根据你配置的 LOGGING 来创建日志文件存储目录

代码语言:javascript复制
# 日志文件的存储位置                                                    
'filename': os.path.join(os.path.dirname(BASE_DIR), 'logs/meiduo.log'),

日志记录器的使用

代码语言:javascript复制
import logging

# 创建日志记录器
logger = logging.getLogger('django')

# 输出日志
logger.debug('测试logging模块debug')
logger.info('测试logging模块info')
logger.error('测试logging模块error')

其他配置

代码语言:javascript复制
# 配置登录url地址
LOGIN_URL='/user/login' # /accounts/login?next=/user

# 设置Django的文件存储类
DEFAULT_FILE_STORAGE='utils.fdfs.storage.FDFSStorage'

# 设置fdfs使用的client.conf文件路径
FDFS_CLIENT_CONF='./utils/fdfs/client.conf'

# 设置fdfs存储服务器上nginx的IP和端口号
FDFS_URL='http://172.16.179.131:8888/'

0 人点赞