前言

Django的配置文件settings.py用于配置整个网站的环境和功能,核心配置必须有项目路径、密钥配置、域名访问权限、App列表、中间件、资源文件、模板配置、数据库的连接方式

基本配置信息

import os

# 项目路径
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/ # 密钥配置
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '&syojot)=!^m&neg)@_*t^tabsl#dg&p5*!m-1yhl97e#7*3di' # 调试模式
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True # 域名访问权限
ALLOWED_HOSTS = [] #App列表
# Application definition INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]

项目路径

BASE_DIR:主要通过os模块读取当前项目在计算机系统的具体路径,该代码在创建项目时自动生成,一般情况下无须修改。

密钥配置

SECRET_KEY:这是一个随机值,在创建项目的时候自动生成,一般情况下无须修改。主要用于重要数据的加密处理,提高项目的安全性,避免遭到攻击者恶意破坏。密钥主要用于用户密码、CSRF机制会话Session等数据加密

  • 用户密码:Django内置一套Auth认证系统,该系统具有用户认证和存储用户信息等功能,在创建用户的时候,将用户密码通过密钥进行加密处理,保证用户的安全性
  • CSRF机制:该机制主要用于表单提交,防止窃取网站的用户信息来制造恶意请求
  • 会话Session:Session的信息存放在Cookie中,以一串随机的字符串表示,用于标识当前访问网站的用户身份,记录相关用户信息

调试模式

DEBUG:该值为布尔类型。如果在开发调试阶段,那么应设置为True,在开发调试过程中会自动检测代码是否发生更改,根据监测结果执行是否刷新重启系统。如果项目部署上线,那么应改为False,否则会泄漏项目的相关信息

域名访问权限

ALLOWED_HOSTS:设置可访问的域名,默认值为空列表。当DEBUG为True并且ALLOWED_HOSTS为空列表时,项目只允许以localhost127.0.0.1在浏览器上访问。当DEBUG为False时,ALLOWED_HOSTS为必填项,否则程序无法启动,如果想允许所有域名访问,可设置ALLOWED_HOSTS=['*']

App列表

INSTALLED_APPS:告诉Django有哪些App。在项目创建时已有admin、auth和sessions等配置信息,这些都是Django内置的应用功能,各个功能说明如下

  • admin:内置的后台管理系统
  • auth:内置的用户认证系统
  • contenttypes:记录项目中所有model元数据(Django的ORM框架)
  • sessions:Session会话功能,用于标识当前访问网站的用户身份,记录相关用户信息
  • messages:消息提示功能
  • staticfiles:查找静态资源路径

如果在项目中创建了App,就必须在App列表INSTALLED_APPS添加App名称。代码如下:

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls' # 新创建的app
]

资源文件配置

资源文件配置分为静态资源和媒体资源。静态资源的配置方式由配置属性STATIC_URLSTATICFILES_DIRSSTATIC_ROOT进行设置;媒体资源的配置方式由配置属性MEDIA_URLMEDIA_ROOT决定

资源路由--STATIC_URL

静态资源指的是网站中不会改变的文件,例如css文件、JavaScript文件以及图片等资源文件,这些静态文件的存放主要由配置文件settings.py设置,Django默认配置如下:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/ STATIC_URL = '/static/'

上述配置是设置静态资源的路由地址,其作用是通过浏览器访问django的静态资源。默认情况下,Django只能识别项目应用App的static文件夹里面的静态资源。当项目启动时,Django会从项目应用app里面查找相关的资源文件,查找功能主要由App列表INSTALLED_APPS的staticfiles实现

注意:一般我们会在app下面创建一个static文件夹,然后在static文件下再创建一个app的名字,再把静态文件放到这个文件夹下,例如你的app叫做polls,有一个静态文件叫做dog.jpg,那么路径为/static/polls/dog.jpg(为什么在app下创建一个static文件夹,还需要在这个static下创建一个同app名字的文件夹呢?原因是如果直接把静态文件放在static文件夹下,那么在模版加载静态文件的时候就是使用dog.jpg,如果在多个app之间有同名的静态文件,这时候可能就会产生混淆。而在static文件夹下加了一个同名app文件夹,在模版中加载的时候就是使用app/dog.jpg,这样就可以避免产生混淆。)

资源集合--STATICFILES_DIRS

如果有一些静态文件是和app没有任何关系的。那么可以在settings.py中添加STATICFILES_DIRS,以后DTL就会在这个列表的路径中查找静态文件。比如可以设置为:

# 设置根目录的静态资源文件夹static
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

这样我们就可以在浏览器中访问根目录的static,static文件夹中可以存放一些与app无关的静态文件。

资源部署--STATIC_ROOT

静态资源配置还有STATIC_ROOT,其作用是在服务器上部署项目,实现服务器和项目之间的映射。STATIC_ROOT主要收集整个项目的静态资源并存放在一个新的文件夹,然后由该文件夹与服务器之间构建映射关系。STATIC_ROOT配置如下:

# 设置资源部署文件夹
STATIC_ROOT = [os.path.join(BASE_DIR, 'AllStatic')]

当项目的配置属性DEBUG为True时,Django会自动提供静态文件代理服务,此时整个项目处于开发阶段,因此无需使用STATIC_ROOT。当配置属性DEBUG为False时,意味着项目进入生产环境,Django不再提供静态文件代理服务,此时需要在项目的配置文件中设置STATIC_ROOT

设置STATIC_ROOT需要使用Django操作指令collectstatic来收集所有静态资源,这些静态资源都会保存在STATIC_ROOT所设置的文件夹里。

媒体资源--MEDIA

一般情况下,STATIC_URL是设置静态资源文件的路由地址,如CSS样式文件、JavaScript以及常用图片等。对于一些经常变动的资源,通常将其存放在媒体资源文件夹,如用户头像、歌曲文件等。

媒体资源和静态资源是可以同时存在的,而且两者可以独立运行,互不影响,而媒体资源只有配置属性MEDIA_URLMEDIA_ROOT

在配置文件settings.py里设置配置属性MEDIA_URLMEDIA_ROOTMEDIA_URL用于设置媒体资源的路由地址,MEDIA_ROOT用于获取media文件夹在计算机系统的完整路径信息,如下所示:

# 设置媒体路由地址
MEDIA_URL = '/media/'
# 获取media文件夹的完整路径
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

配置属性设置后,还需要将media文件夹注册到django中,让django知道如何找到媒体文件,否则无法在浏览器上访问该文件夹的文件信息。我们为媒体文件夹media添加相应的路由地址

from django.conf import settings
from django.urls import path, re_path
from django.views.static import serve
urlpatterns = [
re_path('media/(?P<path>.*)', serve,
{'document_root': settings.MEDIA_ROOT}, name="media")
]

此时,我们就可以通过浏览器访问media文件夹下的资源了

模板配置信息

使用前后端分离框架,这里暂不描述

数据库配置

待更新

中间件配置

中间件(Middleware)是一个用来处理Django的请求(Request)和响应(Response)的框架级别的钩子,它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。

当用户在网站中进行某个操作时,这个过程是用户向网站发送HTTP请求(Request);而网站会根据用户的操作发返回相关的网页内容,这个过程称为响应处理(Response)。从请求到响应的过程中,当Django接收到用户请求时,首先经过中间件处理请求信息,执行相关的处理,然后将处理结果返回给用户。



从上图中可清晰的看到,中间件的作用是处理用户请求信息和返回响应内容。开发者可以根据自己的开发需求自定义中间件,只要将自定义的中间件添加到配置属性MIDDLEWARE中即可激活

一般情况下,Django默认的中间件配置均可满足大部分开发需求,我们在项目中MIDDLEWARE中添加LocalMiddleware中间件,使得Django内置的功能支持中文显示,代码如下:

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
# 添加中间件
'django.middleware.locale.LocaleMiddleware'
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

Django内置中间件

配置属性MIDDLEWARE的数据格式为列表类型,每个中间件的设置顺序是固定的,如果随意变更中间件,就很容易导致程序异常。每个中间件的说明如下:

  • SecurityMiddleware:内置的安全机制,做了一些安全处。比如设置XSS防御的请求头,比如做了http协议转https协议的工作等
  • SessionMiddleware:session中间件。会给request添加一个处理好的session对象。
  • LocaleMiddleware:国际化和本地化功能
  • CommonMiddleware:通用中间件作用如下
    • 限制settings.DISALLOWED_USER_AGENTS中指定的请求头来访问本网站。DISALLOWED_USER_AGENT是一个正则表达式的列表。示例代码如下:

import re

DISALLOWED_USER_AGENTS = [

re.compile(r'\s$|$'),

re.compile(r'.PhantomJS.')

]

- 如果开发者在定义url的时候,最后有一个斜杠。但是用户在访问url的时候没有提交这个斜杠,那么`CommonMiddleware`会自动的重定向到加了斜杠的url上去。

- CsrfViewMiddleware:开启CSRF保护功能
- AuthenticationMiddleware:会给request添加一个`user`对象的中间件。
- MessageMiddleware:开启内置的信息提示功能
- XFrameOptionsMiddleware:做了`clickjacking`攻击的保护。`clickjacking`保护是攻击者在自己的病毒网站上,写一个诱惑用户点击的按钮,然后使用iframe的方式将受攻击的网站(比如银行网站)加载到自己的网站上去,并将其设置为透明的,用户就看不到,然后再把受攻击的网站(比如银行网站)的转账按钮定位到病毒网站的按钮上,这样用户在点击病毒网站上按钮的时候,实际上点击的是受攻击的网站(比如银行网站)上的按钮,从而实现了在不知不觉中给攻击者转账的功能。
- django.middleware.gzip.GZipMiddleware:将响应数据进行压缩。如果内容长度少于200个长度,那么就不会压缩。
- 缓存中间件:用来缓存一些页面的
- `django.middleware.cache.UpdateCacheMiddleware`
- `django.middleware.cache.FetchFromCacheMiddleware` ## 内置中间件放置的顺序
1. SecurityMiddleware:应该放到最前面。因为这个中间件并不需要依赖任何其他的中间件。如果你的网站同时支持`http`协议和`https`协议,并且你想让用户在使用http协议的时候重定向到https协议,那么就没有必要让他执行下面一大串中间件再重定向,这样效率更高。
2. UpdateCacheMiddleware:应该在SessionMiddleware, GZipMiddleware, LocaleMiddleware之前。
3. GZipMiddleware。
4. ConditionalGetMiddleware。
5. SessionMiddleware。
6. LocaleMiddleware。
7. CommonMiddleware。
8. CsrfViewMiddleware。
9. AuthenticationMiddleware。
10. MessageMiddleware。
11. FetchFromCacheMiddleware。
12. FlatpageFallbackMiddleware。
13. RedirectFallbackMiddleware。

Django(5)django配置信息的更多相关文章

  1. py文件单独调试django ORM的配置

    1.新建一个py文件 2.代码环境搭建 import os if __name__ != '__main__': exit() # 加载django项目的配置信息 os.environ.setdefa ...

  2. Django setting 常用配置

    setting.py           这个文件包含了所有有关这个Django项目的配置信息,均大写:   TEMPLATE_DIRS , DATABASE_NAME , 等. 最重要的设置是 RO ...

  3. Python - Django - ORM Django 终端打印 SQL 语句

    在 settings.py 中添加以下内容: LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'c ...

  4. 《玩转Django2.0》读书笔记-Django配置信息

    <玩转Django2.0>读书笔记-Django配置信息 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 项目配置是根据实际开发需求从而对整个Web框架编写相应配置信息. ...

  5. 02 Django配置信息

    2-1 基本配置信息 import os # 项目路径 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # ...

  6. Django的安装配置和开发

    参考:<Django Web开发指南> Django的安装配置 1.https://www.djangoproject.com/download/下载Django-1.5.1.tar.gz ...

  7. django mysql 数据库配置

    在settings.py中保存了数据库的连接配置信息,Django默认初始配置使用sqlite数据库. DATABASES = { 'default': { 'ENGINE': 'django.db. ...

  8. python3-开发进阶Django-debug-toolbar的配置和Django logging的配置

    阅读目录 django-debug-toolbar的配置 Django logging的配置 一.django-debug-toolbar的配置 1.介绍 django-debug-toolbar 是 ...

  9. Web框架之Django_02基本操作(Django项目启动配置、数据库连接、orm、增删改查)

    摘要: Django项目简单现实过程 pycharm连接数据库 Django之orm简单操作增删改查 一.新建Django项目.配置.设置: 新建Django项目:(为了熟悉Django操作,暂时全部 ...

随机推荐

  1. 平方十位数(蓝桥杯第八届国赛真题 JAVA-B组)

    思路:从大到小枚举,判断其平方是否不重复 答案:9814072356 //水题 标题:平方十位数 由0~9这10个数字不重复.不遗漏,可以组成很多10位数字. 这其中也有很多恰好是平方数(是某个数的平 ...

  2. springboot+druid报错log4j:WARN No appenders could be found for logger (druid.sql.Connection). log4j:WARN Please initialize the log4j system properly.

     解决方案:新建文件log4j.properties log4j.rootLogger=DEBUG, stdout log4j.appender.stdout=org.apache.log4j.Con ...

  3. 总结traefik 在k8s 环境中的配置文件

    总结traefik 在k8s 环境中的配置文件 traefik.toml配置文件引用 [www@localhost traefik-ingress]$ more * :::::::::::::: co ...

  4. 利用Vue实现一个简单的购物车功能

    开始学习Vue的小白,dalao多多指正 想要实现下面这个界面,包含总价计算.数量增加和移除功能 话不多说代码如下 <!DOCTYPE html> <html> <hea ...

  5. css盒模型以及如何计算盒子的宽度

    css盒模型以及如何计算盒子的宽度 盒模型 每个存在于可访问性树中的元素都会被浏览器绘制成一个盒子[1]. 每个盒子都可以看成由4部分组成,它们分别是 - 元素外边距(margin).元素边框(bor ...

  6. [.net] 关于Exception的几点思考和在项目中的使用(二)

    本文链接: https://www.cnblogs.com/hubaijia/p/about-exceptions-2.html 系列文章: 关于Exception的几点思考和在项目中的使用(一) 关 ...

  7. 系统编程-网络-tcp客户端服务器编程模型(续)、连接断开、获取连接状态场景

    相关博文: 系统编程-网络-tcp客户端服务器编程模型.socket.htons.inet_ntop等各API详解.使用telnet测试基本服务器功能 接着该上篇博文,咱们继续,首先,为了内容的完整性 ...

  8. 13. VUE 组件之间数据传递

    组件数据传递: 父组件向内传递属性---动态属性 子组件向外发布事件 solt 插槽传递模板---具名solt 1. 父组件向子组件传递数据 子组件在父组件的并作为标签引入,通过设置标签的属性传递数据 ...

  9. String a=new String("abc")创建了几个对象

    String str=new String("abc");   紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢? 相信大家对这道题并不陌生,答案 ...

  10. Linux 文件系统和目录结构

    1. Linux 文件系统 2. linux 目录结构 3. 磁盘分区.文件系统和目录的关系 1. Linux 文件系统 Linux 支持多种的文件系统种类,除了 linux 通常使用的 ext 系列 ...