Django Web应用开发实战第二章
一、基本配置信息
"""
Django settings for myblog project. Generated by 'django-admin startproject' using Django 2.2. For more information on this file, see
https://docs.djangoproject.com/en/2.2/topics/settings/ For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.2/ref/settings/
""" 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 = 'y#-jmza4^h1bq!wj&_8y0t8x1j+t@uzm)1-t816ln)g-7b@roh' # 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',
'account', # 用户信息
'album', # 图片墙信息
'article', # 文章信息
'interflow', # 留言板信息
]
- 项目路径BASE_DIR:主要通过os模块读取当前项目在计算机系统的具体路径,该代码在创建项目的时候自动生成,一般不需要更改。
- 密钥配置SECRET_KET:这是一个随机值,在项目创建的时候自动生成,一般情况不需要更改。主要用于重要数据的加密处理,提高项目的安全性,避免遭到攻击者的恶意破坏。密钥主要用于用户密码、CSRF机制和会话Session等数据加密。
- 用户密码:Django内置一套Auth认证系统,该系统具有用户认证和存储用户信息等功能。在创建用户的时候,将用户密钥进行加密处理,保证用户安全性。
- CSRF机制:该机制主要用于表单提交,防止窃取网站的用户信息来制造恶意请求。
- 会话Session:Session的信息存放在Cookie中,以一串随机字符串表示,用于标识当前访问网站的用户的身份,记录相关用户信息。
- 调试模式DEBUG:该值为布尔值。如果在开发调试阶段,那么应该设置为True,在开发调试过程中会自动检测代码是否更改,根据检测结果执行是否刷新重启系统。如果项目部署上线,那么应该将其改为False,否则会泄露项目的相关信息。
- 域名访问权限ALLOW_HOSTS:设置可访问的域名,默认值为空列表。当DEBUG=True并且ALLOW_HOSTS=[]时,项目只允许已localhost或127.0.0.1在浏览器上访问。当DEBUG=False时,ALLOW_HOSTS是必填项,否则程序无法启动,如果想允许所有域名访问可设置ALLOW_HOSTS=['*']。
- App列表INSTALLED_APPS:告诉Django有哪些App。在项目创建时,已有admin、auth和session等配置信息,这些都是Django内置的应用功能。如下:
- admin:内置的后台管理系统。
- auth:内置的用户认证系统。
- contenttypes:记录项目中所有的model元数据(Django的ORM框架)。
- sessions:Session会话功能,用于标识当前访问网站的用户身份,记录相关用户信息。
- messages:消息提示功能。
- staticfiles:查找静态资源路径。
二、资源文件配置
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/ # 资源路由
STATIC_URL = '/static/'
# 资源集合
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'publicStatic')]
# 资源部署
# STATIC_ROOT = os.path.join(BASE_DIR, 'publicStatic') # 设置媒体资源保存路径
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
Django资源文件配置分为静态资源和媒体资源。
- Debug模式下只能识别项目应用APP的static文件夹里的静态资源,如果文件夹改为其他名字,Django就无法识别;若将static文件夹放在别的路径下,Django也是无法识别的。
- 若资源路由STATIC_URL的值为/static/,则浏览器访问静态的网站必须为static。
- 由于STATIC_URL的特殊性,若静态文件夹存放在项目的根目录或定义多个静态文件夹,可使用资源集合STATICFILES_DIRS列表。
- STATIC_ROOT作用是在服务器上部署项目,实现服务器和项目之间的映射。收集(python manage.py collectstatic)整个项目的静态资源并放在一个新的文件夹,然后由该文件夹与服务器之间构建映射关系。Debug=True时,Django提供静态文件代理服务,无需设置。
- 媒体资源和静态资源可以共存,两者可独立运行,互不影响。
- 配置媒体资源后,还需要将media文件夹注册到Django里
from django.contrib import admin
from django.urls import path, re_path # 导入项目应用
from .views import index
# 配置媒体文件夹media
from django.views.static import serve
from django.conf import settings urlpatterns = [
path('admin/', admin.site.urls),
path('', index),
# 配置媒体文件的路由地址
re_path('meida/(?P<path>.*)', serve, ('document_root': settings.MEDIA_ROOT), name='media'),
]
三、模板文件配置
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:定义模板引擎,用于识别模板里的变量和指令。内置模板引擎有DjangoTemplates和jinja2.jinja2,每个模板引擎都有自己的变量和指令语法。
- DIRS:设置模板所在路径。默认空列表。根目录的templates存放共用的模板文件。
- APP_DIRS:是否在app里查找模板文件,默认True。
- OPTIONS:用于填充在RequestContext的上下文(模板里的变量和指令),一般情况下不做任何修改。
四、数据库配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# 'ENGINE': 'django.db.backends.mysql',
#'NAME': DB_NAME,
#'USER': DB_USER,
#'PASSWORD': DB_PASSWORD,
#'HOST': DB_HOST,
#'PORT': DB_PORT,
}
}
- 不同数据库需设置不同数据库引擎,Django提供4种数据库引擎
- 'django.db.backends.mysql'
- 'django.db.backends.postgresql'
- 'django.db.backends.sqlite3'
- 'django.db.backends.oracle'
-
import pymysql pymysql.install_as_MySQLdb()
- 数据库配置列表可配置多个数据库连接
使用mysql需要做下适配mysqldb不支持python3,Django2.0以上版本不再使用mysqldb作为MySQL的连接模块,而选择mysqlclient模块,两者使用上没有太大差异。也可使用pymysql模块连接MySQL,需在MyDjango的init文件里设置数据库连接模块
五、中间件
中间件(Middleware)是一个用来处理Django的请求(Reuqest)和响应(Response)的框架级别的钩子,它是一个轻量级、低级别的插件系统,用于在全局范围内改变Django的输入和输出。
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.sessions.middleware.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
#'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'corsheaders.middleware.CorsMiddleware',
]
- 每个中间件的设置顺序是固定的,若随意变更中间件很容易导致程序异常
- SecurityMiddleware:内置的安全机制,保护网站和用户的通信安全
- SessionMiddleware:会话Session功能
- LocaleMiddleware:国际化和本地化功能
- CommonMiddleware:处理请求信息,规范化请求内容
- CsrfViewMiddleware:开启CSRF防护功能
- AuthenticationMiddleware:开启内置用户认证系统
- MessageMiddleware:开启内置消息提示功能
- XFrameOptionMiddleware:防止恶意程序单击劫持
- CorsMiddlware(django-cors_headers第三方库):设置跨域访问
Django Web应用开发实战第二章的更多相关文章
- AS开发实战第二章学习笔记——其他
第二章学习笔记(1.19-1.22)像素Android支持的像素单位主要有px(像素).in(英寸).mm(毫米).pt(磅,1/72英寸).dp(与设备无关的显示单位).dip(就是dp).sp(用 ...
- 聊天室或文字直播间的效果(AS开发实战第二章学习笔记)
聊天室或文字直播间的效果即是新的文字消息总是加入窗口末尾,同时窗口内部的文本整体向上滚动,窗口的大小.位置保持不变聊天室用到的属性与方法说明gravity 指定文本的对齐方式,取值left|botto ...
- TextView的跑马灯效果(AS开发实战第二章学习笔记)
TextView的跑马灯效果跑马灯用到的属性与方法说明singleLine 指定文本是否单行显示ellipsize 指定文本超出范围后的省略方式focusable 指定是否获得焦点,跑马灯效果要求设置 ...
- Android Studio图形基础(AS开发实战第二章学习笔记)
图形基础 一.drawable 在代码中引用drawable文件可分为两种情况 (1)使用setBackgroundResource和setImageResource方法,可直接在参数中指定drawa ...
- 学习参考《Flask Web开发:基于Python的Web应用开发实战(第2版)》中文PDF+源代码
在学习python Web开发时,我们会选择使用Django.flask等框架. 在学习flask时,推荐学习看看<Flask Web开发:基于Python的Web应用开发实战(第2版)> ...
- Knockout应用开发指南 第二章:监控属性(Observables)
原文:Knockout应用开发指南 第二章:监控属性(Observables) 关于Knockout的3个重要概念(Observables,DependentObservables,Observabl ...
- Android艺术开发探索——第二章:IPC机制(下)
Android艺术开发探索--第二章:IPC机制(下) 我们继续来讲IPC机制,在本篇中你将会学习到 ContentProvider Socket Binder连接池 一.使用ContentProvi ...
- 微软实战训练营(X)重点班第(1)课:SOA必备知识之ASP.NET Web Service开发实战
微软实战训练营 上海交大(A)实验班.(X)重点班 内部课程资料 链接:http://pan.baidu.com/s/1jGsTjq2 password:0wmf <微软实战训练营(X)重点班第 ...
- #Spring实战第二章学习笔记————装配Bean
Spring实战第二章学习笔记----装配Bean 创建应用对象之间协作关系的行为通常称为装配(wiring).这也是依赖注入(DI)的本质. Spring配置的可选方案 当描述bean如何被装配时, ...
- Web前端开发实战6:CSS实现导航菜单结合二级下拉式菜单的简单变换
前面几篇博文都在讲导航菜单和二级下拉式菜单,事实上有非常多方法都能够实现的.详细的情况还要视情况而定. 在后面学习到jQuery框架之后,会有更丰富的动画效果.因为在学习Ajax和jQuery的初步阶 ...
随机推荐
- c# 使用 Read 读取数据块
class Program { static void Main(string[] args) { Stream s = new MemoryStream(); for (int i = 0; i & ...
- Note_Fem边界条件的处理和numpy实现的四种方法
将单元刚度矩阵组装为全局刚度矩阵后,有: 此时的线性方程没有唯一解,\([K]\)是奇异矩阵,这是没有引入边界条件,消除刚体位移的原因. 边界条件分为两类:Forced and Geometric;对 ...
- 超详细移动端侧AI口罩识别实现与部署(含源码)
开发环境 数据标注:label studio :https://labelstud.io/ 模型训练:tensorflow 附完整的训练源码和数据 部署开发:Android studio + tens ...
- nuxt,从开发到线上部署
起因: 前段时间,同组小伙伴使用vue做了一个小后台,使一位后端沉寂多年得求道之心又躁动了起来...然后,当我和这个躁动起来得后端要合作重构一个网站得时候,后端小哥哥说,就知道套页面,套页面,不用新技 ...
- 抓包分析:wireshark抓不到TLS1.3数据包中证书的解决方案
近日工作中遇到需要分析使用TLS1.3协议进行通信的数据包的情况,但使用wireshark进行分析发现不能抓到服务端证书,感到诧异遂设法解决 这篇博客给出解决方案,和简单的原理分析 解决方案: 第一步 ...
- 卸载和重装docker的方式
查看已安装的版本 yum list installed|grep docker 卸载 [root@localhost ~]# yum -y remove containerd.io.x86_64 [r ...
- 抽象类的注意事项、abstract关键字的冲突--java进阶day02
1.注意事项 1.抽象类不允许创建对象 2.抽象类存在构造方法 3.抽象类中可以存在普通成员方法 4.抽象类的子类存在两种处理方式 第一种不多解释,主要讲第二种,子类继承了抽象类,相当于子类里面有了抽 ...
- 新更新 Scanner键盘输入
原来我们都是将写好的代码进行打印,这是硬程序,如果我们想让电脑实时输入我们想要的值,就需要使用Scanner进行键盘录入 1.让电脑找到Scanner符咒(电脑自动) 2.召唤Scanner精灵 3. ...
- 【JDBC第8章】数据库连接池
第8章:数据库连接池 8.1 JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: 在主程序(如servlet.beans)中建立数据库连接 进行sql操作 ...
- SQL Server 2008语句大全完整版
--======================== --设置内存选项 --======================== --设置 min server memory 配置项 EXEC sp_co ...