玩转Django2.0---Django笔记建站基础二

第二章

  Django配置信息

  项目配置是根据实际开发需求从而对整改web框架编写相关配置信息。配置信息主要由项目的settings.py实现,主要配置有项目路径、秘钥配置、域名访问权限、App列表、配置静态资源、配置模板文件、数据库配置、中间件和缓存配置。

  2.1、基本配置信息

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 = '-9d8tlwa*!ts_id5io7rbo-f1p)b=5!93#nxv*$nt%u8pq$&3#'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = []


# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'dianxin.apps.DianxinConfig',
]
View Code

  

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 = '-9d8tlwa*!ts_id5io7rbo-f1p)b=5!93#nxv*$nt%u8pq$&3#'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
#调式模式

ALLOWED_HOSTS = []
#域名访问权限

# Application definition
#app列表
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'dianxin.apps.DianxinConfig',
]

 

  上述代码列出了项目路径BASE_DIR、秘钥配置SECRET_KEY、调式模式DEBUG、域名访问权限ALLOWED_HOSTS和App列表INSTALLED_APPS,各个配置说明如下:

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

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

      用户密码:Django内置一套用户管理系统,该系统具有用户认证和存储用户信息等功能,在创建用户的时候,将用户密码通过秘钥进行加密处理,保证用户的安全性。

                      CSRF机制:该机制主要用于表单提交,防止窃取网站的用户信息来制造恶意请求。

      会话Session:Session的信息存放在Cookies,以一串随机的字符串表示,用于表示当前访问的用户身份,记录相关用户信息。

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

    域名访问权限ALLOWED_HOSTS为空时,项目只允许以localhost或者127.0.0.1在浏览器访问。当DEBUG为False时,ALLOWED_HOSTS为必填项,否则程序无法启动,如果想允许所有域名访问,可设置ALLOW_HOSTS=[‘*’]。

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

      admin:内置的后台管理系统

      auth:内置的用户认证系统

      contenttypes:记录项目中所有model元数据(Django的ORM框架)

      sessions:Session会话功能,用于标识当前访问网站的用户身份,记录相关用户信息。

      messages:消息提示功能

      staticfiles:查找静态资源路径

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

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'dianxin.apps.DianxinConfig',
    'index',
    'user',   
]

  2.2、静态资源

  静态资源指的是网站中不会改变的文件。在一般的应用程序中,静态资源包括CSS文件、JavaScript文件以及图片等资源文件。此处简单介绍一下css文件和javascript文件

  CSS也称层叠样式表(Cascadming Style Sheets),是一种用来表现HTML(通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。

  JavaScript是一种直译式脚本语言,也是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用的,用来给HTML网页增加动态功能。

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

STATIC_URL = '/static/'

  

  如果想在MyDjango的根目录下存放静态资源,可以在配置文件settings.py中设置STATICFILES_DIRS属性。该属性以列表的形式表示,设置方式如下:

  #设置根目录的静态资源文件夹static

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

  #设置App(index)的静态资源文件夹index_static

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'index/index_static')
]

    STATIC_URL:是必须配置的属性而且属性值不能为空。如果没有配置STATICFILES,则STATIC_URL只能识别App里的static静态资源文件夹。

    STATICFILES_DIRS:是可选配置属性,属性值为列表或元组格式,每个列表(元组)元素代表一个静态资源文件夹,这些文件夹可自行命名。

    在浏览器上访问项目的静态资源时,无论项目的静态资源文件夹是如何命名的,在浏览器上,静态资源的上级目录必须为static,而static是STATIC_URL的属性值,因为STATIC_URL也是静态资源的起始URL。

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

STATIC_ROOT = os.path.join(BASE_DIR, 'all_static')

  STATIC_ROOT用于项目生成部署,在项目开发过程中作用不大

   2.3 模板路径

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

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        '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',
            ],
        },
    },
]

  模板配置是以列表格式呈现的,每个元素具有如下的含义:

    BACKEND:定义模板引擎,用于识别模板里面的变量和指令。内置的模板引擎有Django Templates和jinja2.Jinja2,每个模板引擎都有自己的变量和指令语法。

    DIRS:设置模板所在路径,告诉Django在那个地方查找模板的位置,默认为空列表。

    APP_DIRS:是否在App里查找模板文件

    OPTIONS:用于填充在RequestContext中上下文的调用函数,一般情况下不做任何修改。

   如果是App下面有新建Templates这个目录则需要再模板配置代码如下,下面是添加index项目的示例:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates'),
                 os.path.join(BASE_DIR, 'index/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',
            ],
        },
    },
]

  

  2.4 数据库配置

  数据库配置是选择项目所使用的数据库的类型,不同的数据库需要设置不同的数据库引擎,数据库引擎用于实现项目与数据库的连接,Django提供4种数据库引擎:

 'django.db.backends.sqlite3'
 'django.db.backends.mysql'
 'django.db.backends.postgresql'
 'django.db.backends.oracle'

  项目创建时默认使用Sqlite3数据库,这是一款轻型的数据库,常用于嵌入式系统开发,而且占用的资源非常小。Sqlite3数据库配置信息如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

 

  如果把上述的连接信息改为Mysql数据库,首先安装Mysql连接模块,由于mysqldb不支持Python3,因此Django2不再使用mysqldb作为MySQL的连接模块,而选择了mysqlcleient模块,两者之间在使用上并没有太大的差异。

  在配置mysql之前,首先使用如下安装mysqlclient模块:

pip install mysqlclient

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

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'my_web',
        'USER': 'root',
        'PASSWORD': 'password',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

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

DATABASES = {
    #第一个数据库
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_db',
        'USER': 'root',
        'PASSWORD': 'password',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    },
    #第二个数据库
    'MyDjango': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'MyDjango_db',
        'USER': 'root',
        'PASSWORD': 'password',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    },
    #第三个数据库
    'my_sqlite3': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'sqlite3'),
    },
}

  上述代码共连接三个数据库,分别是django_db、MyDjango_db、sqlite3。django_db和MyDjango_db均属于mysql数据库,Sqlite3属于Sqlite3数据库系统。从属性DATABASES的数据类型可以发现是一个Python的数据字典,也就是说如果需要连接过个数据库,只要在属性DATABASES中设置不同的键值对即可实现。

  Django除了支持PostgreSQL、Sqlite3、MySQL和Oracle之外,还支持SQLServer和MongoDB的连接。

 

  2.5 中间件

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

 

  从图中能清晰的看到,中间件的作用主要是处理用户请求信息。开发者也可以根据用户的开发需求自定义中间件,只要将自定义的中间件添加到配置属性MIDDLEWARE中即可激活。一般情况下,Django默认的中间件配置均可满足大部分的开发需求。在项目的MIDDLEWARE中添加LocaleMiddleware中间件,使得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',
]

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

    SecurityMiddleware:内置的安全机制,保护用户与网站的通信安全

    SessionMiddleware:会话Session功能

    LocaleMiddleware:支持中文语言

    CommonMiddleware:处理请求信息,规范化请求内容

    CsrfViewMiddleware:开启CSRF防护功能

    AuthenticationMiddleware:开启内置的用户认证系统

    MessageMiddleware:开启内置的信息提示功能

    XFrameOptionsMiddleware:防止恶意程序点击劫持

 

  小结:

  项目配置是根据实际开发需求从而对整个web框架编写相关配置信息。配置信息主要由项目的settings.py实现,主要配置有项目路径、秘钥配置、域名访问权限、App列表、配置静态资源、配置模板文件、配置模板文件、数据库配置、中间件和缓存配置。

  当DEBUG为True并且ALLOWED_HOSTS为空时,项目只允许已localhost或127.0.0.1在浏览器访问。当DEBUG为False时,ALLOWED_HOSTS为必填项,否则程序无法启动,如果想允许所有域名访问,可设置ALLOW_HOSTS=['*']。

  App列表INSTALLED_APPS的各个功能说明如下。

    admin:内置的后台管理系统。

    auth:内置的用户认证系统。

    contenttypes:记录项目中所有model元数据(Django的ORM框架)。

    sessions:Session会话功能,用于表示当前访问网站的用户身份,记录相关用户信息。

    messages:消息提示功能。

    staticfiles:查找静态资源路径。

  配置静态资源需要了解熟悉STATIC_URL和STATICFILES_DIRS的区别,两者区别如下。

    STATIC_URL是必须配置的属性而且属性值不能为空。如果没有配置STATICFILES_DIRS,则STATIC_URL只能识别App里的static静态资源文件夹。

    STATICFILES_DIRS是可选配置属性,属性值为列表或元组格式,每个列表(元组)元素代表一个静态资源文件夹,这些文件夹可自行命名。

    在浏览器上访问项目的静态资源时,无论项目的静态资源文件夹是如何命名的,在浏览器上,静态资源的上级目录为static,而static是STATIC_URL的属性值,因     为STATIC_URL也是静态资源的起始URL。

  模板信息是以列表格式呈现的,每个元素具有不同的含义,其含义如下说明。

    BACKEND:定义模板引擎,用于识别模板里面的变量和指令。内置的模板引擎有DjangoTemplates和jinja2.Jinja2,每个模板引擎都有自己的变量和指令语法。

    DIRS:设置模板所在路径,告诉Django在那个地方查找模板的位置,默认为空列表。

    APP_DIRS:是否在App里查找模板文件。

    OPTIONS:用于填充在RequestContext中上下文的调用函数,一般情况下不做任何修改。

  Django配置MySQL数据库连接信息。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'my_web',
        'USER': 'root',
        'PASSWORD': 'password',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

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

  

posted @ 2019-09-24 22:39  python坚持者  阅读(325)  评论(0)    收藏  举报