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

                                       作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

  项目配置是根据实际开发需求从而对整个Web框架编写相应配置信息。配置信息主要由项目对“setting”实现,主要配置有项目路径,密钥配置,域名访问权限,App列表,配置静态资源,配置模板文件,数据配置,中间件和缓存配置。

一.基本配置信息

  一个简单对项目必须具备对基本配置信息有:项目路径,密钥配置,域名访问权限,App列表和中间件。以“MyWeb”项目为例,setting.py的基本配置如下:

  1. """
  2. Django settings for MyWeb project.
  3.  
  4. Generated by 'django-admin startproject' using Django 2.1.4.
  5.  
  6. For more information on this file, see
  7. https://docs.djangoproject.com/en/2.1/topics/settings/
  8.  
  9. For the full list of settings and their values, see
  10. https://docs.djangoproject.com/en/2.1/ref/settings/
  11. """
  12.  
  13. import os
  14.  
  15. '''
  16. BASE_DIR:
  17. 指定项目路径,主要通过os模块读取当前项目在系统的具体路径,该代码在创建项目时自动生成,一般情况下无需修改。
  18. '''
  19. BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  20.  
  21. '''
  22. SECRET_KEY:
  23. 指定密钥配置,是一个随机值,在项目创建的时候自动生成,一般情况下无需修改。主要用于重要的数据的加密处理,提高系统的
  24. 安全性,避免遭到攻击者恶意破坏。密钥主要用户用户密码,CSRF机制和绘画 Session等数据加密。
  25.  
  26. 用户密码:
  27. Django内置一套用户管理系统,该系统具有用户认证和存储用户信息等功能,在创建用户的时候,该用户密码通过密钥
  28. 进行加密处理,保证用户的安全性能。
  29. CSRF机制:
  30. 该机制主要用以表单提交,防止窃取网站的用户信息来制造恶意请求。
  31. 会话Session:
  32. Session的信息存放在Cookies,以一串随机的字符串表示,用于标识当前访问网站的用户身份,记录相关用户信息。
  33. '''
  34. SECRET_KEY = 'nstb+fm4-5oxi8e432bi!w^lty20@a6lb721&byi6^gw_b6)_f'
  35.  
  36. '''
  37. DEGUG:
  38. 指定调试模式,该值为布尔值。主要在开发调试阶段应设置为True,在开发调试过程中会自动检测代码是否发生更改,根据检测
  39. 结果执行是否刷新重启系统。如果项目配置部署上线,应该将其改为False,否则会泄露系统的相关信息。
  40. '''
  41. DEBUG = True
  42.  
  43. '''
  44. ALLOWED_HOSTS:
  45. 设置可访问的域名,默认值为空。当DEBUG为True并且ALLOWD_HOSTS为空时,项目只允许以localhost或者127.0.0.1在浏览器
  46. 上访问。当DEBUG为False时,ALLOWED_HOSTS为必填项,否则程序无法启动,如果想允许所有域名访问,可设置ALLOW_HOSTS=["*"]。
  47. '''
  48. ALLOWED_HOSTS = []
  49.  
  50. '''
  51. INSTALLED_APPS:
  52. 指定App列表,告诉Django有哪些App。在项目创建时已有admin,auth和session等配置信息,这些都是Django内置的应用功能。
  53. 各个功能说明如下:
  54. admin:
  55. 内置的后台管理系统。
  56. auth:
  57. 内置的用户认证系统。
  58. contenttypes:
  59. 记录项目中所有model元数据(Django的ORM框架)。
  60. sessions:
  61. Session会话功能,用于标识当前访问网站的用户身份,记录相关用户信息。
  62. messages:
  63. 消息提示功能。
  64. staticfiles:
  65. 查找静态资源路径。
  66.  
  67. 温馨提示:
  68. 如果在项目创建了App,必须在App列表INSTALLED_APPS添加App名称。将MyWeb项目已经创建的App添加到App列表,代码如下:
  69. '''
  70. INSTALLED_APPS = [
  71. 'django.contrib.admin',
  72. 'django.contrib.auth',
  73. 'django.contrib.contenttypes',
  74. 'django.contrib.sessions',
  75. 'django.contrib.messages',
  76. 'django.contrib.staticfiles',
  77. 'index',
  78. 'user',
  79. ]

二.静态资源

  静态资源指的是网站中不会改变的文件。在一般的应用程序中,静态资源包括CSS文件,JavaScript文件以及图片等资源文件。

  1. 此处简单介绍以下CSSJavaScript文件:
  2.   CSS也称层叠样式表(Cascading Style Sheets),是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。
  3.  
  4.   Javascript是一种直译是脚本语言,也是一种动态类型,弱类型,基于原型的语言,内置支持类型。它的解释器被成为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用的,用来给HTML网页增加动态功能。

  一个项目在开发过程中肯定需要使用CSS和JavaScript文件,这些静态文件的存放主要由配置文件setting.py设置,配置信息如下:

  1. '''
  2. STATIC_URL:
  3. 是必须配置的属性而且不能为空。如果没有配置STATICFILES_DIRS,则STATIC_URL只能识别static静态资源文件夹。
  4. '''
  5. STATIC_URL = '/static/'
  6.  
  7. '''
  8. STATICFILES_DIRS:
  9. 是可选的配置属性,属性值为列表或元组格式,每个列表(元组)元素代表一个静态资源文件夹,这些文件夹可自行命名。
  10. 在浏览器上访问项目的静态资源时,无论项目的静态资源文件夹是如何命名的,在浏览器上,静态资源的上级目录必须为static,
  11. 而static是STATIC_URL的默认属性值,因为STATIC_URL也是静态资源的起始URL。
  12. 除此之外,静态资源配置还有STATIC_ROOT,其作用是方便在服务器上不熟项目,实现服务器和项目之间的映射。STATIC_ROOT主
  13. 要收集整个项目的静态资源并存放在一个新的文件夹,然后由该文件夹与服务器之间的构建映射关系。STATIC_ROOT用于项目生产部署,
  14. 在项目开发过程中作用不大,关于STATIC_ROOT的配置和STATICFILES_DIRS类似。
  15. '''
  16. STATICFILES_DIRS = [
  17. os.path.join(BASE_DIR, 'public_static'),
  18. os.path.join(BASE_DIR,'index/index_static')
  19. ]

三.模版路径

  在Web开发中,模板是一种较为特殊的HTML文档。这个HTML文档嵌入了一些能够让Python识别的变量和指针,然后程序解析这些变量和指令,生成的完整的HTML网页并返回给用户浏览。模板是Django里面的MTV框架模式的T部分,配置模板路径是告诉Django在解析模板时,如何查找模板所在的位置。创建项目是,Django已经初始的模板配置信息,如下所示:

  1. '''
  2. TEMPLATES:
  3. 模板配置是以列表格式呈现的,每个元素具有不同的含义,其含义说明如下:
  4. BACKEND:
  5. 定义模板引擎,用于识别模板里面的变量和指令。内置的模板引擎有Django Templates和jinjia2.jinja2,每个模板引擎
  6. 都有自己的变量和指令语法。
  7.  
  8. DIRS:
  9. 设置模板所在路径,告诉Django在哪个地方查找模板的位置,默认为空列表。
  10. 模板配置通常配置DIRS路径即可。在项目的根目录和index下分别创建template文件夹。根目录的templates通常存放共用
  11. 的模板文件,能够供各个App的模板文件调用,该模式符合代码重复使用的原则。如HTML的<head>部分。index的templates是存
  12. 放当前App所需要使用的模板文件。模板的配置如下所示。
  13.  
  14. APP_DIRS:
  15. 是否在App里查找模板文件。
  16.  
  17. OPTIONS:
  18. 用于填充在RequestContext中上下文的调用函数,一般情况下不做任何修改。
  19.  
  20. '''
  21. TEMPLATES = [
  22. {
  23. 'BACKEND': 'django.template.backends.django.DjangoTemplates',
  24. 'DIRS': [
  25. os.path.join(BASE_DIR, 'templates'),
  26. os.path.join(BASE_DIR,'index/index_templates')
  27. ],
  28. 'APP_DIRS': True,
  29. 'OPTIONS': {
  30. 'context_processors': [
  31. 'django.template.context_processors.debug',
  32. 'django.template.context_processors.request',
  33. 'django.contrib.auth.context_processors.auth',
  34. 'django.contrib.messages.context_processors.messages',
  35. ],
  36. },
  37. },
  38. ]

四.数据库配置

  数据库配置是选择项目所使用的数据库的类型,不同的数据库需要设置不同的数据库引擎,数据库引擎用于实现项目与数据的链接,Django提供4种数据库引擎:'django.db.backends.postgresql','django.db.backends.mysql','django.db.backends.sqlite3'和'django.db.backends.oracle'。创建项目是默认使用Sqlite3数据库配置信息如下:

  1. '''
  2. DATABASES:
  3. 指定数据库的类型,如下所示,默认是使用sqlite3。
  4. '''
  5. DATABASES = {
  6. 'default': {
  7. 'ENGINE': 'django.db.backends.sqlite3',
  8. 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
  9. }
  10. }

  如果把上面的链接信息改为MySQL数据库,首先安装MySQL链接模块,由于mysqldb不支持Python3,因此Django2.0不在使用mysqldb作为MySQL的链接模块,而选择了mysqlclient模块,两者之间在使用上并没有太大的差异。在配置MySQL之前,首先安装mysqlclient模块,这里以pip安装方法为例,打开CMD窗口并输入安装指令“pip install mysqlclient”,等待模块安装完成。然后检测mysqlclient的版本信息,如果mysqlclient版本信息过低,就不符合Django的使用要求。在CMD窗口进入Python交互解释器进行版本验证,如下图所示:

  1. Microsoft Windows [版本 6.1.7601]
  2. 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
  3.  
  4. C:\Users\yinzhengjie>pip install mysqlclient
  5. Collecting mysqlclient
  6. Downloading https://files.pythonhosted.org/packages/6f/d5/fee36b78367c275d7542181bd522d7204dbfb4bc2ad2c6de72a738059a92/mysqlclient-1.3.14-cp36-cp36m-win_amd64.whl (266kB)
  7. 100% |████████████████████████████████| 276kB 57kB/s
  8. Installing collected packages: mysqlclient
  9. Successfully installed mysqlclient-1.3.14
  10.  
  11. C:\Users\yinzhengjie>

C:\Users\yinzhengjie>pip install mysqlclient

  一般情况下,使用pip安装mysqlclient模块都能符合Django的使用要求。如果在开发过程中发现Django提示mysqlclient版本过低,而且mysqlclient的版本又大于1.3.7版本,那么可以对Django的源码进行修改,在Python的安装目录下找到base文件(“C:\Users\yinzhengjie\softwares\python36\Lib\site-packages\django\db\backends\mysql\base.py”)。

  完成mysqlclient模块的安装后,在项目的配置文件setting.py中配置MySQL数据库链接信息,代码如下:

  1. '''
  2. DATABASES
  3. 标识指定数据库的配置信息
  4. ENGINE
  5. 指定数据库的类型,此处我们指定的是mysql。
  6. NAME
  7. 指定数据库的名称
  8. USER
  9. 指定数据库的用户名
  10. PASSWORD
  11. 指定数据的密码
  12. HOST
  13. 指定数据的主机IP地址
  14. POST
  15. 指定数据库的端口信息
  16.  
  17. '''
  18. DATABASES = {
  19. 'default': {
  20. 'ENGINE': 'django.db.backends.mysql',
  21. 'NAME': 'yinzhengjie',
  22. 'USER':'root',
  23. 'PASSWORD':'yinzhengjie',
  24. 'HOST':'172.30.1.2',
  25. 'POST': '',
  26. }
  27. }

  上述链接方式用于链接MySQL里面一个名为“yinzhengjie”的数据库,上述配置只是链接了一个“yinzhengjie”的数据库,在日常的开发中,有时候链接需要多个数据库,实现方法如下:

  1. DATABASES = {
  2. #第一个数据库
  3. 'default': {
  4. 'ENGINE': 'django.db.backends.sqlite3',
  5. 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
  6. },
  7.  
  8. #第二个数据库为mysql
  9. 'yinzhengjie': {
  10. 'ENGINE': 'django.db.backends.mysql',
  11. 'NAME': 'yinzhengjie',
  12. 'USER':'root',
  13. 'PASSWORD':'yinzhengjie',
  14. 'HOST':'172.30.1.2',
  15. 'POST': '',
  16. },
  17. #第三个数据库
  18. 'MyDjango': {
  19. 'ENGINE': 'django.db.backends.mysql',
  20. 'NAME': 'MyDjango_db',
  21. 'USER': 'root',
  22. 'PASSWORD': 'yinzhengjie',
  23. 'HOST': '172.30.1.2',
  24. 'POST': '',
  25. }
  26. }

  上述代码供链接了三个数据库,分别是“yinzhengjie”,"MyDjango_db"和“db.sqlite3”。“yinzhengjie”,"MyDjango_db"均属于MySQL数据库系统,“db.sqlite3”属于Sqlite3数据库系统。从DATABASES的数据类型可以发现是一个数据字典,也就是说如果需要链接多个数据库,只需要属性DATABASES中设置不同的键值对即可实现。

  值得注意的是,本片博客是以MySQL的5.7版本为例进行介绍的。如果读者使用的是5.7以上的版本,在Django链接MySQL数据库时会提示“django.db.utils.OperationalError”的错误信息,这是因为MySQL8.0版本的密码加密方式发生了改变,8.0版本的用户密码采用的是cha2加密方法。为了解决这Django链接MySQL数据的错误问题。在MySQL的可视化工具中允许以下SQL语句:

  1. ALTER USER 'root'@'172.30.1.%' IDENTIFIED WITH mysql_native_password BY 'yinzhengjie';
  2.  
  3. FLUSH PRIVILEGES;

  Django除了支持PostgreSQL,Sqlite3,MySQL和Oracle之外,还支持SQLServer和MangoDB的链接。由于不同的数据库有不同的链接方式,此处不过多介绍,本篇博客以MYSQL链接为例,若需了解其他数据库的链接方式,可自行搜索相关资料。

五.中间件

  中间件(Middleware)是处理Django的request和response对象的钩子,当用户在网站中进行单击某个按钮等操作时,这个动作是用户向网站发送请求(request);而网页会根据用户的操作返回相关的网页内容,这个过程称为响应处理(response)。从请求到响应的过程中,当Django接受到用户请求时,Django首先经过中间件 处理请求信息,执行相关的处理,然后将处理结果返回给用户,中间件执行流程如下图所示:

  从上图能清晰的看到,中间件的作用主要是处理用户请求信息。开发者也可以根据自己的开发需求自定义中间件,只要将自定义的中间件添加到配置属性MIDDLEWARE中即可激活。一般情况下,Django默认的中间件配置均可满足大部分的开发需求。在项目的MINDDELEWARE中添加LocalMiddleware中间件,使得Django内置的功能支持中文显示,代码如下:

  1. '''
  2. MIDDLEWARE
  3. 配置属性MIDDLEWARE的数据格式为列表类型,每个中间件的设置顺序是固定的,如果随意变更中间件很容易导致呈现异常。
  4. SecurityMiddleware:
  5. 内置的安全机制,保护用户与网站的通信安全。
  6. SessionMiddleware:
  7. 会话Session功能。
  8. LocalMiddleware:
  9. 支持中文语言。
  10. CommonMiddleware:
  11. 处理请求信息,规范化请求内容。
  12. CsrfViewMiddleware:
  13. 开启CSRF防护功能。
  14. AuthenticationMiddleware:
  15. 开启内置的用户认证系统。
  16. MessageMiddleware:
  17. 开启内置的信息提示功能。
  18. XFrameOptionsMiddleware:
  19. 防止恶意程序点击劫持。
  20.  
  21. '''
  22. MIDDLEWARE = [
  23. 'django.middleware.security.SecurityMiddleware',
  24. 'django.contrib.sessions.middleware.SessionMiddleware',
  25. 'django.middleware.local.LocalMiddleware',
  26. 'django.middleware.common.CommonMiddleware',
  27. 'django.middleware.csrf.CsrfViewMiddleware',
  28. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  29. 'django.contrib.messages.middleware.MessageMiddleware',
  30. 'django.middleware.clickjacking.XFrameOptionsMiddleware',
  31. ]





《玩转Django2.0》读书笔记-Django配置信息的更多相关文章

  1. <玩转Django2.0>读书笔记:邮件和分页

    1. 发送邮件 # settings.py设置 # 邮箱设置 EMAIL_USE_SSL = True # 邮件服务器 EMAIL_HOST = 'smtp.qq.com' # 邮件服务端口 EMAI ...

  2. <玩转Django2.0>读书笔记:模板和模型

    1. 模板内置标签 Django常用内置标签 标签 描述 {% for %} 遍历输出变量的内容 {% if %} 对变量进行条件判断 {% csrf_token %} 生成csrf_token标签, ...

  3. <玩转Django2.0>读书笔记:表单

    1. 表单字段 参考: 官方文档 Django表单字段汇总 2. 表单代码示例(forms.Form) # form.py代码 # 获取数据库数据 choices_list = [(i+1,v['ty ...

  4. <玩转Django2.0>读书笔记:URL规则和视图

    1. 带变量的URL #urls.py from django.urls import path from .view import * urlpatterns = [ path('',index_v ...

  5. 《玩转Django2.0》读书笔记-Django建站基础

    <玩转Django2.0>读书笔记-Django建站基础 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.网站的定义及组成 网站(Website)是指在因特网上根据一 ...

  6. 《玩转Django2.0》读书笔记-探究视图

    <玩转Django2.0>读书笔记-探究视图 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 视图(View)是Django的MTV架构模式的V部分,主要负责处理用户请求 ...

  7. 《玩转Django2.0》读书笔记-编写URL规则

    <玩转Django2.0>读书笔记-编写URL规则 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. URL(Uniform Resource Locator,统一资源定位 ...

  8. 02 Django配置信息

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

  9. Django(5)django配置信息

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

随机推荐

  1. PHP——运行shell命令|脚本

    内置函数 PHP | 系统程序执行 exec shell_exec passthru system 配置 打开php.ini配置文件,并从disable_function将用到的函数从禁用中删除,然后 ...

  2. Iroha and a Grid AtCoder - 1974(思维水题)

    就是一个组合数水题 偷个图 去掉阴影部分  把整个图看成上下两个矩形 对于上面的矩形求出起点到每个绿点的方案 对于下面的矩形 求出每个绿点到终点的方案 上下两个绿点的方案相乘后相加 就是了 想想为什么 ...

  3. Hdoj 1312.Red and Black 题解

    Problem Description There is a rectangular room, covered with square tiles. Each tile is colored eit ...

  4. yii2 阿里云短信 aliyun-dysms

    aliyun-dysms安装 composer require "saviorlv/yii2-dysms:dev-master" 或者添加下列代码在composer.json文件中 ...

  5. (一)flask-sqlalchemy的安装和配置

    在使用flask-sqlalchemy之前要先了解ORM模型,什么叫做ORM模型 一.什么是ORM ORM 全拼Object-Relation Mapping. 称为对象-关系映射 主要实现模型对象到 ...

  6. Eureka

    Consul vs. Eureka Eureka is a service discovery tool. The architecture is primarily client/server, w ...

  7. GNOME禁用GDM中night-light功能

    Night-light feature is enabled also in GDM screen, see here : https://bugzilla.gnome.org/show_bug.cg ...

  8. A1141. PAT Ranking of Institutions

    After each PAT, the PAT Center will announce the ranking of institutions based on their students' pe ...

  9. Linux基本命令总结(一)

    java开发的服务器一般都是linux系统,因此把有关命令小结一下: 1,cd [目录名] 进入相应的目录下. cd / 进入系统的根目录 cd .. 或者 cd .. // 退入当前位置的上级目录 ...

  10. [luogu3939][数颜色]

    题目链接 思路 对于每一种颜色都建立一个动态开点线段树.然后每次查询的时候就去这个颜色的线段树上查询就行了.修改之后不要忘记交换颜色. 这个题目数据有点强.抄了个比较快的读入优化才卡过去. 代码 /* ...