引言
在进行
Django Web 开发
的时候有许多东西要配置, 配置的东西一多就容易忘记不会配,这里做一个常用配置的笔记方便查阅。当然我们也要会查阅官方文档,毕竟阅读文献也是一种技能。
在配置 Django
项目环境的时候,先自己打印 BASE_DIR
看看路径指向哪,因为会用到很多次这个 BASE_DIR
,了解这个 BASE_DIR
基目录,好在其他配置中使用到更好理解。
# settings.py or develop.py
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(BASE_DIR)
# 以我个人举例
# C:\Users\Administrator\Desktop\meiduo_project\meiduo_mall\meiduo_mall
配置开发环境
项目的环境一般分为**
开发环境
和生产环境
**。
- 开发环境:用于编写和调试项目代码。
- 生产环境:用于项目线上部署运行。
1. 新建配置文件
- 准备配置文件目录
- 新建包,命名为
settings
,作为配置文件目录
- 新建包,命名为
- 准备开发和生产环境配置文件
- 在配置包
settings
中,新建开发develop.py
和生产product.py
环境配置文件
- 在配置包
- 准备开发环境配置内容
- 将默认的配置文件
settings.py
中内容分别拷贝至develop.py, product.py
- 将默认的配置文件
2. 指定开发环境配置文件
在项目下的 manage.py
中修改成如下
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "meiduo_mall.settings.develop")
#!/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
中改成如下所示:
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扩展包
pip install Jinja2
2. 配置Jinja2模板引擎
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模板引擎环境配置代码
# !/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 模板引擎环境
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(默认)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
MySQL
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'
静态文件目录
在
Django
的setting.py
配置文件中默认没有静态文件目录
的配置选项,因此需要我们自己在setting
文件中手动添加STATICFILES_DIRS
配置项
# 设置访问静态文件的url前缀
STATIC_URL = '/static/'
# 设置静态文件存放的目录
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
国际化
# 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
配置项
# 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
扩展包
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.9
和1.10
具体配置参考:Django-Redis中文文档 https://django-redis-chs.readthedocs.io/zh_CN/latest/
2、配置
Redis
数据库
# 缓存
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
缓存
# 配置Session存储
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
# session缓存别名
SESSION_CACHE_ALIAS = "session"
再配置了 SESSION_ENGINE
,SESSION_CACHE_ALIAS
,这两个配置项,Session
信息也会保存到 Redis
数据库中。
配置工程日志
在 develop.py
开发环境中设置 LOGGING
选项来配置工程日志。
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
来创建日志文件存储目录
# 日志文件的存储位置
'filename': os.path.join(os.path.dirname(BASE_DIR), 'logs/meiduo.log'),
日志记录器的使用
import logging
# 创建日志记录器
logger = logging.getLogger('django')
# 输出日志
logger.debug('测试logging模块debug')
logger.info('测试logging模块info')
logger.error('测试logging模块error')
其他配置
# 配置登录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/'