【Django】 06.项目实操

项目准备

配置开发环境

django环境分为开发环境生产环境


manager.py启动的项目是开发调试环境,wsgi.py启动的是生产环境。应该为两个环境分别配置配置环境。

创建一个专门的包用于管理配置环境,里面存放开发环境和生产环境。

配置Jinja2

修改 settinigs配置文件,添加Jinja2引擎

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
TEMPLATES = [
{
'BACKEND': 'django.template.backends.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',
],
'environment': "mallProj.utils.jinja2_env.jinja2_environment" # 添加的环境文件
},

Jinja2引擎默认不带有static和url模板标签语法,需要手动添加。

创建utils包,用于存放工具类文件,新建一个文件用于jinja2环境,通过以下代码提供Jinja2引擎static和url语句。

1
2
3
4
5
6
7
8
9
10
def jinja2_environment(**option):
'''确保可以使用模板引擎中的static和url语句'''
env = Environment(**option)

# 通过django中的函数来实现相关功能
env.globals.update({
'static': staticfiles_storage.url, # 文件相对路径转绝对路径
'url': reverse, # 命名空间转具体url
})
return env

配置MySQL数据库

创建对应的mysql数据库,并添加的专门用户用于管理项目数据库。

配置django配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DATABASES = {
'default': {
# 数据库引擎 -->mysql
'ENGINE': 'django.db.backends.mysql',
# 数据库名称
'NAME': 'mall',
# 用户名
'USER': 'mall_admin',
# 登录密码
'PASSWORD': '',
# 数据库域名
'HOST': '127.0.0.1',
# 端口号
'PORT': '3306'
}
}

由于django默认使用的是MySQLdb数据库驱动,但在python3.x中使用的是pymysql驱动,需要在项目目录下的__init__.py文件中导入。

1
2
import pymysql
pymysql.install_as_MySQLdb()

配置redis数据库

具体配置方法查看文档:https://django-redis-chs.readthedocs.io/zh_CN/latest/

安装django-redis

django配置文件中添加:

1
2
3
4
5
6
7
8
9
10
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"PASSWORD": "我的密码"
}
}
}

配置工程日志

在django配置文件中添加LOGGING来配置日志

详细配置参照网络博客

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
# 日志格式
'standard': {
'format': '[%(asctime)s] [%(filename)s:%(lineno)d] [%(module)s:%(funcName)s] '
'[%(levelname)s]- %(message)s'},
'simple': { # 简单格式
'format': '%(levelname)s %(message)s'
},
},
# 过滤
'filters': {
},
# 定义具体处理日志的方式
'handlers': {
# 默认记录所有日志
'default': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(log_path, 'all-{}.log'.format(time.strftime('%Y-%m-%d'))),
'maxBytes': 1024 * 1024 * 5, # 文件大小
'backupCount': 5, # 备份数
'formatter': 'standard', # 输出格式
'encoding': 'utf-8', # 设置默认编码,否则打印出来汉字乱码
},
# 输出错误日志
'error': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(log_path, 'error-{}.log'.format(time.strftime('%Y-%m-%d'))),
'maxBytes': 1024 * 1024 * 5, # 文件大小
'backupCount': 5, # 备份数
'formatter': 'standard', # 输出格式
'encoding': 'utf-8', # 设置默认编码
},
# 控制台输出
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'standard'
},
# 输出info日志
'info': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(log_path, 'info-{}.log'.format(time.strftime('%Y-%m-%d'))),
'maxBytes': 1024 * 1024 * 5,
'backupCount': 5,
'formatter': 'standard',
'encoding': 'utf-8', # 设置默认编码
},
},
# 配置用哪几种 handlers 来处理日志
'loggers': {
# 类型 为 django 处理所有类型的日志, 默认调用
'django': {
'handlers': ['default', 'console'],
'level': 'INFO',
'propagate': True # 是否继续传递日志信息
},
# log 调用时需要当作参数传入
'log': {
'handlers': ['error', 'info', 'console', 'default'],
'level': 'INFO',
'propagate': True
},
}
}
  • 由于git管理项目时会忽略.log文件,此时logs文件夹为空目录,git拒绝管理空目录,可以通过在logs文件夹下新建一个.gitkeep的文件来保证git管理logs文件夹


【Django】 06.项目实操
http://blog.rainna.xyz/2021/01/31/2021-01-31-01-06.项目实操/
作者
rainnalv
发布于
2021年1月31日
许可协议