Django - 詳細なグローバル構成設定

Django 設定ファイルには、Django のインストール構成がすべて含まれています。通常、このファイルはプロジェクト フォルダーにあります。たとえば、mysite という名前のプロジェクトを作成した場合、構成ファイル settings.py はプロジェクトの mysite フォルダーにあります。

一般的に使用されるいくつかの設定構成を参考のために以下に示します。

1. 静的ファイルを構成する

#STATIC_URL = '/static/' は静的ファイルのエイリアスです
STATIC_URL = '/static/' 
#静的ファイルのアドレス結合、次の 'static' ファイルは自身で作成した静的ファイル (JS、IMG、CSS) のファイル名です
STATICFILES_DIRS = ( 
    os.path.join(BASE_DIR, 'static'), #メイン ファイルの下の静的ファイル
    os.path.join(BASE_DIR,"blog","statics"), #プロジェクト ブログ ファイルの下の静的ファイル
)

2.mysqlデータベースの設定

########設定内の元のデフォルトの sqlite 
DATABASES = { 
    'default': { 
        'ENGINE': 'django.db.backends.sqlite3', 
        'NAME': os.path.join(BASE_DIR, 'db .sqlite3'), 
    } 
} 
############次のように mysql に変更します。
DATABASES = { 
    'default': { 
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': ' test', #データベース名'USER 
        ': 'root', #データベース ユーザー名'PASSWORD 
        ': '19941028', #データベース パスワード'HOST 
        ': '', #データベース ホスト、空白のままにします。デフォルトは次のとおりです。 localhost 
        'PORT': '3306', #データベース ポート
    }} 
#mysql のデフォルト エンジンは MySQLdb であるため、__init__ にあります。
次のコードを py ファイルに追加します。#python3 では、pymysql に置き換える必要があります。次のコードは、メイン構成ファイル (アプリ構成ファイルではなく、プロジェクトと同じ名前のファイルの下) pymysql に追加できます
。 pymysql
pymysql.install_as_MySQLdb() 
#pymysql プレートが見つからない場合は、pip install pymysql を使用してインストールします。

3. 印刷ログを画面に設定する

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'handlers': { 
        'console': { 
            'level': 'DEBUG', 
            'class': 'logging.StreamHandler', 
        }, 
    }, 
    'loggers' : { 
        'django.db.backends': { 
            'handlers': ['console'], 
            'propagate': True, 
            'level': 'DEBUG', 
        }, 
    } 
}

4. 言語

LANGUAGE_CODE = 'en-us'# デフォルト
LANGUAGE_CODE = 'zh-hans'# 主に管理ページ向けに中国語に変更

5. テンプレートのパスを設定する

TEMPLATE_DIRS = ( 
        os.path.join(BASE_DIR,'templates'), 
    ) 
#次に、プロジェクトのルート ディレクトリの下にテンプレート フォルダーを追加します

6.アプリを登録する

INSTALLED_APPS = [ 
 'django.contrib.admin', 
 'django.contrib.auth', 
 'django.contrib.contenttypes', 
 'django.contrib.sessions', 
 'django.contrib.messages', 
 'django.contrib.staticfiles' , 
 'app1.apps.App1Config',  
 # デフォルトですでに存在します。存在しない場合は、アプリ名を追加します。例: 'blog' 
 # 新しいアプリケーションをここに追加する必要があります
。]

7. SQL ステートメント

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'handlers': { 
        'console': { 
            'level': 'DEBUG', 
            'class': 'logging.StreamHandler', 
        }, 
    }, 
    'loggers' : { 
        'django.db.backends': { 
            'handlers': ['console'], 
            'propagate': True, 
            'level': 'DEBUG', 
        }, 
    } 
} 

操作がデータベースに関連する場合、作成したステートメントは SQL ステートメントに変換され、サーバー上に出力されます。

8. データベース内の UserInfo (ユーザーテーブル) が django の組み込み AbstractUser を継承している場合

1) モデルをインポートする必要があります

django.contrib.auth.models から AbstractUser をインポート

2) 設定ファイルを追加します

AUTH_USER_MODEL = "アプリケーション名.ユーザー情報"

9. ミドルウェア、自作ミドルウェア

たとえば、プロジェクトの md フォルダーにある md.py ファイル内の 2 つのミドルウェア M1 と M2

MIDDLEWARE = [ 
 'django.middleware.security.SecurityMiddleware', 
 'django.contrib.sessions.middleware.SessionMiddleware', 
 'django.middleware.common.CommonMiddleware', 
 'django.middleware.csrf.CsrfViewMiddleware', 
 'django.contrib. auth.middleware.AuthenticationMiddleware'、
 'django.contrib.messages.middleware.MessageMiddleware'、
 'django.middleware.clickjacking.XFrameOptionsMiddleware'、
 'md.md.M1'、
 'md.md.M2'、
]

なお、ミドルウェアを自分で書く場合、設定は後からシステムに書く必要があります

10. セッションストレージの関連構成

1) データベース構成 (デフォルト)

Django はデフォルトでセッションをサポートし、デフォルトでセッション データをデータベース、つまり django_session テーブルに保存します。
構成 settings.py 
 SESSION_ENGINE = 'django.contrib.sessions.backends.db' # エンジン (デフォルト) 
 SESSION_COOKIE_NAME = "sessionid" # セッション Cookie がブラウザに保存されるときのキー、つまり: sessionid = ランダムな文字列 (デフォルト) 
 SESSION_COOKIE_PATH = "/" # セッション Cookie が保存されるパス (デフォルト) 
 SESSION_COOKIE_DOMAIN = None # セッション Cookie が保存されるドメイン名 (デフォルト) 
 SESSION_COOKIE_SECURE = False # HTTPS が Cookie を送信するかどうか (デフォルト) 
 SESSION_COOKIE_HTTPONLY = True #セッション Cookie は http 送信のみをサポートします (デフォルト) 
 SESSION_COOKIE_AGE = 1209600 # セッション Cookie の有効期限 (2 週間) (デフォルト) 
 SESSION_EXPIRE_AT_BROWSER_CLOSE = False # セッションを期限切れにするためにブラウザを閉じるかどうか (デフォルト) 
 SESSION_SAVE_EVERY_REQUEST = False # セッションを保存するかどうかリクエストごとに、デフォルトの変更を保存した後のみ (デフォルト)

2) キャッシュ構成

Configuration settings.py 

 SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # エンジン
 SESSION_CACHE_ALIAS = 'default' # 使用されるキャッシュ エイリアス (デフォルトのメモリ キャッシュ、または memcache)。エイリアスはキャッシュ設定によって異なります。
 SESSION_COOKIE_NAME = " sessionid " # セッション Cookie がブラウザに保存されるときのキー、つまり: sessionid = ランダムな文字列
 SESSION_COOKIE_PATH = "/" # セッション Cookie が保存されるパス
 SESSION_COOKIE_DOMAIN = None # セッション Cookie が保存されるドメイン名
 SESSION_COOKIE_SECURE = False # Https 送信 cookie かどうか
 SESSION_COOKIE_HTTPONLY = True # セッション cookie が http 送信のみをサポートするかどうか
 SESSION_COOKIE_AGE = 1209600 # セッション cookie の有効期限 (2 週間) SESSION_EXPIRE_AT_BROWSER_CLOSE 
 = False # セッションを期限切れにするためにブラウザを閉じるかどうか
 SESSION_SAVE_EVERY_REQUEST = False # かどうか各リクエストはセッションを保存します。デフォルトでは変更後に保存されます。

3) デフォルト設定

構成 settings.py 
 SESSION_ENGINE = 'django.contrib.sessions.backends.file' # エンジン
 SESSION_FILE_PATH = なし # キャッシュ ファイル パス、なしの場合は、tempfile モジュールを使用して一時アドレスを取得します tempfile.gettempdir() SESSION_COOKIE_NAME  
 = "sessionid" #セッション Cookie がブラウザに保存されるときのキー。つまり、 sessionid=random string 
 SESSION_COOKIE_PATH = "/" # セッション Cookie が保存されるパス
 SESSION_COOKIE_DOMAIN = None # セッション Cookie が保存されるドメイン名
 SESSION_COOKIE_SECURE = False # HTTPS かどうかCookie を送信します
 SESSION_COOKIE_HTTPONLY = True # セッション Cookie が http 送信のみをサポートするかどうか
 SESSION_COOKIE_AGE = 1209600 # セッション Cookie の有効期限 (2 週間) SESSION_EXPIRE_AT_BROWSER_CLOSE 
 = False # セッションを期限切れにするためにブラウザを閉じるかどうか
 SESSION_SAVE_EVERY_REQUEST = False # セッションを保存するかどうかリクエストごとに、デフォルトの変更を保存した後

注:
1) 構成をカスタマイズすることもできますが、カスタマイズされた構成は構成ファイルに書き込む必要があり、最後のコードで使用するときに構成をインポートできます。

django.conf から設定をインポートします
。設定名

2) 上記の構成はすべて、特定の問題に合わせて変更する必要があり、システムのデフォルト構成については説明されていません
3) 上記の構成は、前の django 入門チュートリアルで遭遇した一般的な構成にすぎません。後続の構成は、この中で徐々に追加および更新されますチュートリアル。

11. 設定ファイルのアップロードディレクトリ

#ファイルアップロードパスを設定
MEDIA_URL = '/media/' 
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')

アップロードしたファイルにブラウザでアクセスしたい場合は、urls.py で次の設定を行う必要があります。

django.views.static からインポートserve 
django.conf からインポート設定

urlpatterns = [ 
    ... 
    re_path('^media/(?P<path>.*)$',serve, {'document_root': settings.MEDIA_ROOT}) 、
]

Django 設定の最適な構成サンプルコード

具体的なコードは次のとおりです。

import os
import socket
SITE_ID = 1
# 项目的根目录
# 简化后面的操作
PROJECT_ROOT = os.path.dirname(os.path.dirname(__file__))
# 加载应用
# 把应用添加到INSTALLED_APPS中
from apps.kuser.mysetting import myapp as kuser_app
from apps.blog.mysetting import myapp as blog_app
MY_APPS = blog_app + kuser_app
# 加载静态文件
from apps.blog.mysetting import my_staticfiles as blog_staticfiles
from apps.kuser.mysetting import my_staticfiles as kuser_staticfiles
MY_STATIC_DIRS = blog_staticfiles + kuser_staticfiles
# 加载模板文件
from apps.blog.mysetting import my_templates as blog_templates
from apps.kuser.mysetting import my_templates as kuser_templates
MY_TEMPLATE_DIRS = blog_templates + kuser_templates
# 密钥配置
# 适用于开发环境和部署环境
# 可以从系统环境中,配置文件中,和硬编码的配置中得到密钥
try:
 SECRET_KEY = os.environ['SECRET_KEY']
except:
 try:
 with open(os.path.join(PROJECT_ROOT, 'db/secret_key').replace('\\', '/')) as f:
  SECRET_KEY = f.read().strip()
 except:
 SECRET_KEY = '*lk^6@0l0(iulgar$j)faff&^(^u+qk3j73d18@&+ur^xuTxY'
# 得到主机名
def hostname():
 sys = os.name
 if sys == 'nt':
 hostname = os.getenv('computername')
 return hostname
 elif sys == 'posix':
 host = os.popen('echo $HOSTNAME')
 try:
  hostname = host.read()
  return hostname
 finally:
  host.close()
 else:
 raise RuntimeError('Unkwon hostname')
#调试和模板调试配置
#主机名相同则为开发环境,不同则为部署环境
#ALLOWED_HOSTS只在调试环境中才能为空
if socket.gethostname().lower() == hostname().lower():
 DEBUG = TEMPLATE_DEBUG = True
 ALLOWED_HOSTS = []
else:
 ALLOWED_HOSTS = [
 'baidu.com',
 '0.0.0.0',
 ]
 DEBUG = TEMPLATE_DEBUG = False
#数据库配置
MYDB = {
 'mysql': {
 'ENGINE': 'django.db.backends.mysql',
 'NAME': 'books', #你的数据库名称
 'USER': 'root', #你的数据库用户名
 'PASSWORD': '', #你的数据库密码
 'HOST': '', #你的数据库主机,留空默认为localhost
 'PORT': '3306', #你的数据库端口
 },
 'sqlite': {
 'ENGINE': 'django.db.backends.sqlite3',
 'NAME': os.path.join(PROJECT_ROOT, 'db/db.sqlite3').replace('\\', '/'),
 }
}
# 给静态文件url一个后缀,在templates里用到的。
# 映射到静态文件的url
# STATIC_URL的含义与MEDIA_URL类似
STATIC_URL = '/static/'
# 总的static目录
# 可以使用命令 manage.py collectstatic 自动收集static文件
# STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static').replace('\\', '/')
#放各个app的static目录及公共的static目录
#STATICFILES_DIRS:和TEMPLATE_DIRS的含义差不多,就是除了各个app的static目录以外还需要管理的静态文件设置,
#比如项目的公共文件差不多。然后给静态文件变量赋值,告诉Django,静态文件在哪里
#另外,Django提供了一个findstatic命令来查找指定的静态文件所在的目录,例如:D:\TestDjango>python manage.py findstatic Chrome.jpg
# 默认情况下(如果没有修改STATICFILES_FINDERS的话),Django首先会在STATICFILES_DIRS配置的文件夹中寻找静态文件,然后再从每个app的static子目录下查找,
# 并且返回找到的第一个文件。所以我们可以将全局的静态文件放在STATICFILES_DIRS配置的目录中,将app独有的静态文件放在app的static子目录中。
# 存放的时候按类别存放在static目录的子目录下,如图片都放在images文件夹中,所有的CSS都放在css文件夹中,所有的js文件都放在js文件夹中。
STATICFILES_DIRS = (
 ("downloads", os.path.join(PROJECT_ROOT, 'static/downloads').replace('\\', '/')),
 ("uploads", os.path.join(PROJECT_ROOT, 'static/uploads').replace('\\', '/')),
)
# 将app中的静态文件添加到静态文件配置列表中
STATICFILES_DIRS += MY_STATIC_DIRS
# 最后关键的部分是STATICFILES_DIRS以下配置
# 简要说一下,static文件夹在项目里,有css js images 三个文件夹(看项目结构),他们的路径分别是:
# os.path.join(STATIC_ROOT,'css'),os.path.join(STATIC_ROOT,'js'),os.path.join(STATIC_ROOT,'images');
# 我们分别给他们起三个别名css,js,images(你可以随意给,不过为了易记,我们原名称指定别名了)
TEMPLATE_DIRS = (
 os.path.join(PROJECT_ROOT, 'templates').replace('\\', '/'),
)
# 配置应用的模板文件路径
TEMPLATE_DIRS += MY_TEMPLATE_DIRS
# 配置缓存
 CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
  'LOCATION': 'unix:/tmp/memcached.sock',
  'KEY_PREFIX': 'lcfcn',
  'TIMEOUT': None
 }
 }
LOGIN_REDIRECT_URL = '/'
LOGIN_URL = '/auth/login/'
LOGOUT_URL = '/auth/logout/'
# 指用户上传的文件,比如在Model里面的FileFIeld,ImageField上传的文件。如果你定义
# MEDIA_ROOT=c:\temp\media,那么File=models.FileField(upload_to="abc/"),上传的文件就会被保存到c:\temp\media\abc。MEDIA_ROOT必须是本地路径的绝对路径。
MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'static/uploads')
# MEDIA_URL是指从浏览器访问时的地址前缀。
MEDIA_URL = '/uploads/'
# 应用注册列表
INSTALLED_APPS = (
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.sites',
 'django.contrib.sitemaps',
)
#为了不和系统应用混合,自己开发的应用放在这里
# 将自己写的app添加到应用列表中去
INSTALLED_APPS += MY_APPS
# django 中间件
# django处理一个Request的过程是首先通过django 中间件,然后再通过默认的URL方式进行的。
# 所以说我们要做的就是在django 中间件这个地方把所有Request拦截住,
# 用我们自己的方式完成处理以后直接返回Response,那么我们可以简化原来的设计思路,
# 把中间件不能处理的 Request统统不管,丢给Django去处理。
MIDDLEWARE_CLASSES = (
 'django.middleware.cache.UpdateCacheMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 # 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.cache.FetchFromCacheMiddleware',
)
ROOT_URLCONF = 'lcforum.urls'
WSGI_APPLICATION = 'lcforum.wsgi.application'
#数据库配置
DATABASES = {
 'default': MYDB.get('sqlite'),
}
# 语言
LANGUAGE_CODE = 'zh-cn'
# 时区
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = True
# 在template中使用静态文件
# 采用这种方式需要有一些额外配置,打开settings.py,确认TEMPLATE_CONTEXT_PROCESSORS中包含有'django.core.context_processors.static'
# TEMPLATE_CONTEXT_PROCESSORS = (
# 'django.core.context_processors.debug',
# 'django.core.context_processors.i18n',
# 'django.core.context_processors.media',
# 'django.core.context_processors.static',
# 'django.contrib.auth.context_processors.auth',
# 'django.contrib.messages.context_processors.messages',
#
# 'django.core.context_processors.tz',
# 'django.contrib.messages.context_processors.messages',
# # 'blog.context_processors.custom_proc',自定义函数
# )
#from django.conf import settings
#gettext = lambda s: s
#getattr()
# 假设有个工程mysite,有两个app为blog跟bbs
# django处理static的方法是把各个app各自的static合并到一处
# 比如:
# mysite/mysite/static 放置公共静态文件
# mysite/bbs/static 放置该app自己的静态文件
# mysite/blog/static 放置该app自己的静态文件
# 可以这么设置:
# STATIC_ROOT = '/www/mysite/mysite/static '
# STATIC_URL = '/static/'
# STATICFILES_DIRS = (
# 'mysite/static',
# 'bbs/static/',
# 'blog/static/',
# )
# 使用命令
# manage.py collectstatic
# 就会自动把所有静态文件全部复制到STATIC_ROOT中
# 如果开启了admin,这一步是很必要的,不然部署到生产环境的时候会找不到样式文件
# 不要把你项目的静态文件放到这个目录。这个目录只有在运行python manage.py collectstatic时才会用到

おすすめ

転載: blog.csdn.net/weixin_47649808/article/details/126366676