前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django 常用配置笔记

Django 常用配置笔记

作者头像
忆想不到的晖
发布2021-12-06 20:38:36
4730
发布2021-12-06 20:38:36
举报
文章被收录于专栏:huihui

引言

在进行 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:\Users\Administrator\Desktop\meiduo_project\meiduo_mall\meiduo_mall

配置开发环境

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

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

1. 新建配置文件

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

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

jinja2_env.py
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/'
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-05-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • 配置开发环境
    • 1. 新建配置文件
      • 2. 指定开发环境配置文件
        • 3. 指定生产环境配置文件
        • 配置Jinja2模板引擎
          • 1. 安装Jinja2扩展包
            • 2. 配置Jinja2模板引擎
              • 3. 补充Jinja2模板引擎环境
              • 数据库配置
                • SQLite3(默认)
                  • MySQL
                    • 数据库 ENGINE
                    • 静态文件目录
                    • 国际化
                    • 缓存配置
                      • BACKEND
                        • Django-Redis-Session 配置
                        • 配置工程日志
                          • 准备日志文件目录
                            • 日志记录器的使用
                            • 其他配置
                            相关产品与服务
                            云数据库 Redis
                            腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档