【Django配置管理】settings文件配置

这篇具有很好参考价值的文章主要介绍了【Django配置管理】settings文件配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原文作者:我辈理想
版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。


前言

Django框架是python的一个web框架,可以使用丰富的python的库。settings.py文件无论是本地开发还是环境部署都是经常使用的文件,如果settings没有配置好,开发将困难重重。很多时候环境代码正常,一个参数就能决定了你的成败。
偷偷告诉大家,我们平时习以为常的一个import 项目.settings,不是官方推荐的最佳方式。


一、settings基础配置

作为python语言,我们默认遵循PEP8编码规范,settings文件配置也是一样。

参数 描述
BASE_DIR 项目目录,django版本不同使用不同的获取方式
SECRET_KEY 项目密钥,项目创建时随机生成,应为唯一的、不可预测的值,用于sessions 、messages 、密码生成和验证,加密规则等
DEBUG 调试模式,涉及到django很多默认设置,影响具体参数的使用
ALLOWED_HOSTS 可以服务的主机/域名的字符串列表,DEBUG = False时,需要设置参数
INSTALLED_APPS 启用的所有应用程序的字符串列表,遵循引用顺序,与Django框架整体功能相匹配
MIDDLEWARE 中间件列表,涉及程序的入站reuqest和出站response,以及自定中间件(访问记录、全局异常处理)
ROOT_URLCONF django项目所有url开始的位置,urlconf
AUTH_USER_MODEL 项目用户的模型,用户models继承AbstractUser时需要修改
TEMPLATES 模板引擎的设置的列表,views中render等相关html引用的基础
WSGI_APPLICATION django内置服务,runserver的启动参数
DATABASES 数据库的设置,默认为sqlite3,其他数据库需要自己配置
AUTH_PASSWORD_VALIDATORS 检查用户密码强度的验证程序列表
LANGUAGE_CODE 语言,默认英语
TIME_ZONE 时区,将作用于数据库的时间字段
USE_I18N Django的翻译系统
USE_L10N 数据的本地化格式,作用于datetime和time
USE_TZ 时区感知,将作用于数据库的时间字段
STATIC_URL 静态请求url中的路径,http://www.example.com/static/
STATICFILES_DIRS 项目中静态文件的位置,可以是相对位置,亦可以是绝对位置,在 collectstatic时将这些静态文件收集到STATIC_ROOT
STATIC_ROOT 静态文件的绝对路径,其中 collectstatic 将收集静态文件到STATIC_ROOT以进行部署
MEDIA_URL 媒体请求url中的路径,http://www.example.com/media/
MEDIA_ROOT 媒体文件的绝对路径
DEFAULT_AUTO_FIELD 用于没有字段的模型的默认主键字段,类型 primary_key=True ,models的默认自增的id
LOGGING 日志配置,常用字典结构

二、django默认配置

如果Django设置文件不需要定义任何设置。每个设置都有一个合理的默认值。这些默认值位于模块中 django/conf/global_settings.py。

三、django标准配置

django的全部配置可参考链接:django文档
常用的标准配置包括邮箱配置、缓存配置、日志配置、session配置等

四、django第三方配置

1.使用三方配置

在实际开发过程中,我们会使用很多第三方配置,比如前后端分离项目,后端使用django+drf,drf的配置是一个常用的配置

django项目的settings文件
# drf配置  
REST_FRAMEWORK = {
    # 认证:微信认证
    "DEFAULT_AUTHENTICATION_CLASSES": [
        'utils.jwt_auth.JWTAuthentication',  # 自定义JWT认证
        # 'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        # 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ]
}
# jwt配置
JWT_AUTH = {
    # 过期时间
    'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
    'JWT_AUTH_HEADER_PREFIX': 'JWT',  # 设置在请求头中的前缀,之前是通过请求体来做的,这里有所区别,默认为JWT
    # 'JWT_RESPONSE_PAYLOAD_HANDLER': 'user.utils.my_payload_response.jwt_response_payload_handler', # 重写返回字段
}
# oracle数据库:服务端位置
Oracle_path = os.path.join(BASE_DIR, 'utils', 'instantclient_21_6')

2.自建django三方库,如何使用配置

【Django配置管理】settings文件配置
如果有需要写自己的django第三方库,我们希望使用我们的同学在django项目的settings中设置参数,同时三方库可以使用这个配置。上述图片是我写的一个第三方django库,实现了抖音飞书应用的对外api的封装,在飞书官网文档和示例以及其他库的基础上做的,起初把这个项目是要在django项目中应用。django封装飞书api接口

2.1自建settings文件

这个主要是在自己的三方库中建了一个setting文件,主要是from django.conf import settings和APISettings。DEFAULTS 是默认参数,如果django项目setting中没有设置FEISHU_V2_SDK_CONFIGS,建使用DEFAULTS 中的默认值。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
from enum import Enum
from django.conf import settings

logger = logging.getLogger("feishu")

# 环境变量名
DEFAULTS = {
    'FEISHU_TOKEN_EXPIRE_TIME': 7200,  # token时效, https://open.feishu.cn/document/ukTMukTMukTM/uIjNz4iM2MjLyYzM
    'FEISHU_TOKEN_UPDATE_TIME': 600,  # token提前更新的时间
    'FEISHU_BATCH_SEND_SIZE': 200,  # 批量发送消息列表的大小限制
    'FEISHU_APP_ID': None,
    'FEISHU_APP_SECRET': None,
    'FEISHU_VERIFY_TOKEN': None,
    'FEISHU_ENCRYPT_KEY': None
}


class APISettings:
    def __init__(self, defaults=None):
        self.defaults = defaults or DEFAULTS
        self.user_settings = getattr(settings, 'FEISHU_V2_SDK_CONFIGS', None)  # CKEditor 5 configuration in settings

    def __getattr__(self, attr):
        if attr not in self.defaults:
            raise AttributeError("Invalid API setting: '%s'" % attr)

        try:
            # Check if present in user settings
            val = self.user_settings[attr]
        except KeyError:
            # Fall back to defaults
            val = self.defaults[attr]
        # Cache the result
        setattr(self, attr, val)
        return val


api_settings = APISettings(DEFAULTS)


# try:
#     if settings.FEISHU_APP_ID:
#         FEISHU_APP_ID = settings.FEISHU_APP_ID
#     if settings.FEISHU_APP_SECRET:
#         FEISHU_APP_SECRET = settings.FEISHU_APP_SECRET
#     if settings.FEISHU_ENCRYPT_KEY:
#         FEISHU_ENCRYPT_KEY = settings.FEISHU_ENCRYPT_KEY
#     if settings.FEISHU_VERIFY_TOKEN:
#         FEISHU_VERIFY_TOKEN = settings.FEISHU_VERIFY_TOKEN
#     if settings.FEISHU_TOKEN_EXPIRE_TIME:
#         FEISHU_TOKEN_EXPIRE_TIME = settings.FEISHU_TOKEN_EXPIRE_TIME
#     if settings.FEISHU_TOKEN_UPDATE_TIME:
#         FEISHU_TOKEN_UPDATE_TIME = settings.FEISHU_TOKEN_UPDATE_TIME
#     if settings.FEISHU_BATCH_SEND_SIZE:
#         FEISHU_BATCH_SEND_SIZE = settings.FEISHU_BATCH_SEND_SIZE
# except Exception as e:
#     logger.debug(f"导入飞书应用和事件的配置出现报错(%s),请查看settings配置" % e)


class AppType(str, Enum):
    TENANT = "tenant"  # 企业自建应用
    USER = "user"  # 第三方应用

2.2三方库中其他文件调用django项目settings

【Django配置管理】settings文件配置
【Django配置管理】settings文件配置

2.3三方库使用

这个可以参考上边的接口md文档。
【Django配置管理】settings文件配置

五、参数详情

1.DEBUG管理

DEBUG配置虽然是一个布尔参数,但是在django配置起到至关重要的作用,很多参数都是跟DEBUG挂钩的。很多时候我们的参数未生效都是跟这个参数有关。比如ALLOWED_HOSTS、runserver命令、不同系统环境文件位置等。
一般的本地开发和测试环境DEBUG=True,线上环境DEBUG=False

2.静态配置

我这里主要举例常用的2中方式:本地开发、线上部署。
我们的静态文件通常都是在项目manage.py的同级目录下建立的static文件夹,或者项目app下的static文件夹。
在本地开发时,我们可能不需要使用命令收集静态文件。

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
    os.path.join(BASE_DIR, 'app','static'),
]

在部署线上时,通常静态文件和项目文件时分离的,就是静态文件和项目文件的权限不同,服务器的存储位置不同。静态文件通常用于nginx静态转发,django后端时端口转发。STATICFILES_DIRS记录所有静态文件的位置,collectstatic命令将STATICFILES_DIRS记录的静态文件收集到STATIC_ROOT文件下,用于nginx静态转发,linux系统部署时通常是/var/www/static/。

# 静态文件+媒体文件
STATIC_URL = '/static/'

if DEBUG:
	STATICFILES_DIRS = [
	    os.path.join(BASE_DIR, 'static'),
	    os.path.join(BASE_DIR, 'app','static'),
	]
else:
	STATICFILES_DIRS = [
	    os.path.join(BASE_DIR, 'static'),
	    os.path.join(BASE_DIR, 'app','static'),
	]
    # collectstatic命令将静态文件收集至STATIC_ROOT
    STATIC_ROOT = '/var/www/html/gstatic/'

注意:如果是在windows部署的前后端不分离项目,并且没有使用iis而是使用python manage.py runsever,通常会出现静态文件不显示的问题(收集静态文件也不起作用)

3.本地化国际化(翻译)

django开发中,常用的是本地化配置,主要是LANGUAGE_CODE 、TIME_ZONE、USE_L10N 和USE_TZ

LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
USE_L10N = True
USE_TZ = False

在需要实现双语翻译的系统时,还需要在上述参数的基础上配置USE_I18N、LOCALE_PATHS 、LANGUAGES ,并且需要将要翻译的字符串添加标记(_(‘要翻译的内容’)),还需执行命令python manage.py makemessages -l en生成.po文件(交给翻译人员双语翻译),执行python manage.py compilemessages将.po文件转成.mo文件。

LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'language'),
)
LANGUAGES = (
    ('en', 'English'),
    ('zh', '中文简体'),
)

LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False

4.如有其他可在评论区回复

六、自定义配置名和正确导入settings配置

官方推荐的settings中的所有参数都是大写的,有考虑过为什么吗?我们在这里将官方的使用方式告诉大家,在后边的用到自定义配置参数时,可以少走弯路。

1.文件导入settings

# 官方推荐方式,是的就是这样,不是from 项目 import settings
from django.conf import settings

2.设置自定义参数

参数必须大写,如果包含小写将报错,AttributeError: ‘Settings’ object has no attribute ‘ALI_SEND_CODe’

# settings.py文件

AAA = '123'

3.程序中设置配置

# myapp_defaults 
BBB = '456'
# 程序veiws.py
from django.conf import settings
from app import myapp_defaults # 自定义的一些参数,这个是py文件 
if not settings.configured:
    settings.configure(myapp_defaults, DEBUG=True)

3.读取settings配置

# 
from django.conf import settings
print(settings.AAA)
print(settings.BBB)

# 123
# 456

七、settings配置文件拆分

在Django中,settings.py文件用于配置您的应用程序的设置。但是,随着应用程序变得越来越复杂,您可能会发现settings.py文件变得越来越大。这时,将其拆分成多个文件可以让代码更易于维护。
【Django配置管理】settings文件配置

以下是将settings.py文件拆分为多个文件的步骤:

  1. 创建一个名为settings的文件夹,用于存放所有的设置文件。
  2. 将settings.py文件中的所有设置分成几个文件,例如:base.py、dev.py、prod.py、local.py等
  3. 在base.py文件中将所有基本设置放置在一个文件中。例如:
# base.py

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

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

# 其他基本设置也可以放在这里

  1. 在其他设置文件(如dev.py、prod.py、local.py等)中导入base.py文件中的所有设置,并进行必要的更改。例如:
# dev.py

from .base import *

DEBUG = True

ALLOWED_HOSTS = ['localhost', '127.0.0.1']

  1. 最后,在您的应用程序中使用设置文件。例如,您可以在manage.py和wsgi.py文件中使用设置文件。
    manage.py 文件如下:
import os
import sys


def main():
    """Run administrative tasks."""
    if "develop" in sys.argv:
        sys.argv.remove("develop")
        os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'webybt.settings.develop')
    else:
        os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'webybt.settings.online')
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        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?"
        ) from exc
    execute_from_command_line(sys.argv)


if __name__ == '__main__':
    main()

wsgi.py文件如下

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'webybt.settings.online')

application = get_wsgi_application()

启动程序

我们时通过sys来获取命令中的参数,如果存在develop,我们就将配置指向develop.py。

  1. pycharm启动
    【Django配置管理】settings文件配置
    【Django配置管理】settings文件配置

  2. 命令行启动
    【Django配置管理】settings文件配置

八、问题处理

1.项目部署不显示静态文件

如果是在windows部署的前后端不分离项目,并且没有使用iis而是使用python manage.py runsever,通常会出现静态文件不显示的问题(收集静态文件也不起作用)文章来源地址https://www.toymoban.com/news/detail-403615.html

静态文件可以通过2中方式显示:一是将DEBUG设为True(一般线上部署都改成了False,不建议使用这种);二是启动命令增加参数,正确的启动命令是python manage.py runsever --insecure。详见django文档

到了这里,关于【Django配置管理】settings文件配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kafka单机到集群- 自动化- SSL以及全部配置文件 作者精选

    本文实现kafka集群的配置和启动过程。并将脚本自动化,使得通用性、独立性更强。 用途 参考资料 kafka官方文档:包含安装部署、配置项、api使用等详细信息 附件: Kafka并不难学!:入门、进阶、商业实战 (邓杰) :包含kafka入门和linux快捷操作等系统化认识的内容。 名词 文

    2024年04月13日
    浏览(48)
  • C#的 Settings.Settings配置文件的使用方法

    1、定义 在Settings.settings文件中定义配置字段。把作用范围定义为:User则运行时可更改(用户范围的字段数据更改存储在用户信息中,不在该程序文件中),Applicatiion则运行时不可更改。可以使用数据网格视图(VS软件的Properties 下面的Setting.settings设置即可),很方便; 2、读取配置

    2024年02月22日
    浏览(35)
  • settings.xml的文件配置大全

    settings.xml 文件中最常配置的还是这几个标签 localRepository 和 mirrors settings.xml文件官方文档地址 nexus 私服信息一般时配置到pom.xml文件中,作为项目私有。

    2024年02月07日
    浏览(36)
  • VSCode 之 设置 settings.json 配置文件

    这篇文章主要介绍了 VSCode - settings.json 配置 , 文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值 VSCode 从插件库里安装 eslint 和 prettier 两个 插件 ,也 🉑️ 实现自动格式化的设置  Ctrl + Shift + P  ( Mac : command + Shift + P ) , 或者直接按  

    2024年02月05日
    浏览(40)
  • 【Python】【进阶篇】17、如何配置settings.py文件

    《settings.py配置文件详解》一文中,将 settings.py 配置文件的每一项给大家做了介绍。在开发的过程中,为了使 settings.py 适用项目,都要对这个默认配置文件进行相应的修改,那么我们应该如何修改呢,有哪几个重要的步骤呢?下面总结了配置文件的一些通用修改项,让我们一

    2024年02月02日
    浏览(52)
  • 如何打开并且配置vscode的setting.json文件

    setting.json文件的作用就是当你把这个文件放到安装目录下之后,vscode就会自动识别这个文件。这个就可以让你快速把一个全新的vscode设置成自己之前已经设置过的样子 提示:以下是本篇文章正文内容,下面案例可供参考

    2024年01月20日
    浏览(33)
  • 【业务功能篇65】maven加速 配置settings.xml文件 镜像

    添加阿里镜像仓

    2024年02月12日
    浏览(38)
  • maven的settings.xml和pom.xml配置文件详解

    maven的配置文件主要有 settings.xml 和pom.xml 两个文件。 其中在maven安装目录下的settings.xml,如:D:Program Filesapache-maven-3.6.3confsettings.xml 是全局配置文件 用户目录的.m2子目录下的settings.xml,如:C:Userschenxc.m2settings.xml 配置只是针对当前用户的配置文件 项目根路径下的pom.xml主

    2024年02月05日
    浏览(45)
  • django静态文件配置和使用

    一、首先需要了解的知识点是: 1、出于对效率和安全的考虑,django管理静态文件的功能仅限于在开发阶段的debug模式下使用,且需要在配置文件的INSTALLED_APPS中加入django.contrib.staticfiles(django工程创建后默认已经安装),网站正式部署上线后,静态文件是由Nginx等服务器管理。

    2024年02月02日
    浏览(47)
  • 【业务功能篇80】Springboot项目 maven配置仓库&镜像settings文件分析

    项目中我们需要依赖许多包,那么就涉及到maven配置文件,我们需要配置settings.xml文件,这里面会配置我们的本地仓库localRepository ,远程仓库:仓库会有我们的依赖仓库repository和插件依赖仓库pluginRepository, mirror镜像仓库 依赖路径:工程优先去本地仓库找依赖—》 没找到就

    2024年02月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包