django中初始化的setting文件介绍:
"""
Django settings for dj_blog project.
Generated by 'django-admin startproject' using Django 3.0.3.
For more information on this file, see
https://docs.djangoproject.com/en/3.0/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.0/ref/settings/
"""
import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
# __file__ 这个变量可以获得当前文件的路径
# os.path.abspath(__file__)指的是当前文件的绝对路径,包括文件名。
# 用 print(os.path.abspath(__file__)) 会得到/home/pyvip/dj31/dj_blog/settings.py
# os.path.dirname(__file__)指的是当前文件所在目录。
# 用 print(os.path.dirname(__file__)) 会得到/home/pyvip/dj31/dj_blog
#print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))会得到/home/pyvip/dj31
#项目根目录路径,也就是获得settings文件的上两层目录路径
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/3.0/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
# 加密盐,在使用startproject开始生成
SECRET_KEY = 'o0ekul98n#ztk5t%l7z!q-h5654#w2)@rblqgz9*1q2+8)=#f2'
# SECURITY WARNING: don't run with debug turned on in production!
#debug模式,上线要改为false
#而且,Django 关闭DEBUG模式后,就相当于是生产环境了,Django官网上指出如果是django框架一旦作为生产环境,那么它的静态文件访问接口就不应该从Django框架中走了,应该有独立的web环境,首推nginx 。
# DEBUG配置为True的时候会再页面暴露出一些出错信息或者配置信息以方便调试.但是在上线的时候应该将其关掉,防止配置信息或者敏感出错信息泄露.
DEBUG = True
# 上线前写允许访问的服务器ip地址,只有添加的ip地址才能访问项目
# 是为了限定请求中的host值,以防止黑客构造包来发送请求.只有在列表中的host才能访问.强烈建议不要使用*通配符去配置,另外当DEBUG设置为False的时候必须配置这个配置.否则会抛出异常.
ALLOWED_HOSTS = ['192.168.211.129']
# Application definition
# app注册
# INSTALLED_APPS是一个一元数组.里面是应用中要加载的自带或者自己定制的app包路径列表.
INSTALLED_APPS = [
'django.contrib.auth', #auth模块是对登录认证方法的一种封装,本身就是一个对象,可以获取用户的详细信息,有了auth模块可以验证登录信息是否存在数据库中,还可以检验用户是否已经登录,校验密码等
'django.contrib.contenttypes', #其中有个app为django.contrib.contenttypes,在使用了python manage.py makemigrations 和 python manage.py migrate命令后,这个app会在数据库创建表 django_content_type,django_content_type表存储了用户所提交的所有model名称与model所在的app名称其中的model字段为用户定义的模型类的名称,app_label为该模型所在app名称
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 默认已有 如果没有只要添加app名称即可 例如: 'app1'
# 新建的应用都要在这里添加
]
#中间件
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware', #一些安全设置,比如XSS脚本过滤。
'django.contrib.sessions.middleware.SessionMiddleware',#session支持中间件,加入这个中间件,会在数据库中生成一个django_session的表。
'django.middleware.common.CommonMiddleware',#通用中间件,会处理一些URL,比如baidu.com会自动的处理成www.baidu.com。比如/blog/111会处理成/blog/111/自动加上反斜杠。
'django.middleware.csrf.CsrfViewMiddleware',#跨域请求伪造中间件。加入这个中间件,在提交表单的时候会必须加入csrf_token,cookie中也会生成一个名叫csrftoken的值,也会在header中加入一个HTTP_X_CSRFTOKEN的值来放置CSRF攻击。
'django.contrib.auth.middleware.AuthenticationMiddleware',#用户授权中间件。他会在每个HttpRequest对象到达view之前添加当前登录用户的user属性,也就是你可以在view中通过request访问user。
'django.contrib.messages.middleware.MessageMiddleware',#消息中间件。展示一些后台信息给前端页面。如果需要用到消息,还需要在INSTALLED_APPS中添加django.contrib.message才能有效。如果不需要,可以把这两个都删除。
'django.middleware.clickjacking.XFrameOptionsMiddleware',#防止通过浏览器页面跨Frame出现clickjacking(欺骗点击)攻击出现。
]
# 项目总入口路由系统:总路由
ROOT_URLCONF = 'dj_blog.urls'
# 页面模板
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',
],
},
},
]
WSGI_APPLICATION = 'dj_blog.wsgi.application'
# 默认数据库连接
# Database
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# Password validation
# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
# https://docs.djangoproject.com/en/3.0/topics/i18n/
#语言
LANGUAGE_CODE = 'en-us'
#时区
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/
STATIC_URL = '/static/'
#1、STATICFILES_DIRS 列表中的目录是开发时创建的静态目录。
#2、STATIC_ROOT 是Django框架放到生产环境中的唯一的一个静态目录
#3、而当你设置DEBUG=False时,就必须在Django框架前端部署nginx或者其他web服务器来提供静态访问入口
开始配置
一、将配置文件和模板文件都放到项目文件下,统一管理(这里要把项目路径和根路径分清楚)
1、再项目路径下创建一个settings文件夹,将settings文件拉到settings文件夹下,改名为dev.py
2、再wsgi\asgi\manage文件下分别修改settings文件位置:
manage.py:
wsgi:
asgi:
注:此时的BASE_DIR为/home/pyvip/dj31/dj_blog,而不是根目录/home/pyvip/dj31
3、将模板文件夹拉到项目文件夹下
二、其他配置
修改 settings
文件
1.配置模板文件
在项目根目录新建一个templates文件夹,用于存放模版文件。
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',
],
'builtins': ['django.templatetags.static'],
},
},
]
2.配置mysql数据库
a.连接虚拟机中的mysql,使用root用户登录:
mysql -uroot -p
b.创建数据库
mysql> CREATE DATABASE myproject CHARSET=utf8;
Query OK, 0 rows affected (0.13 sec)
c.创建用户
# 新建 用户 密码
mysql>create user qiyu identified by 'qiyu';
Query OK, 0 rows affected (0.00 sec)
d.用户授权
# 赋予 某库的所有权限 库 后面是账号
mysql> grant all on myproject.* to 'qiyu'@'%';
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.20 sec)
我们用刚才创建的用户可以看到数据库只有myproject和information_schema这两表,因为只给了他myproject的权限:
e.加载数据库配置
方法一:直接在settings.py文件中添加数据库配置信息。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'myproject', # 数据库名称
'USER': 'qiyu', # 数据库登录用户名
'PASSWORD': 'qiyu', # 密码
'HOST': '192.168.211.129', # 数据库主机IP,如保持默认,则为127.0.0.1
'PORT': 3306, # 数据库端口号,如保持默认,则为3306
}
}
方法二:将数据库配置信息存到一个文件中,在settings.py文件中将其引入。(推荐)
新建数据库配置文件my.cnf(名字随意选择)
在settings.py文件中引入dba.cnf文件
目的:为了防止泄露账号密码,上传码云时,可以在.gitignore中选择忽略配置文件dba.conf
DATABASES = {
# 方法二:
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
'read_default_file': 'dj_blog/utils/dbs/dba.cnf',
},
}
}
方法二:安装pymysql,并且需要在settings.py文件所在包中的__init__.py
中导入pymysql
#切换虚拟环境
workon dj31_env
#安装pymysql
(dj31_env) pyvip@VIP:~$ pip install -i https://pypi.douban.com/simple pymysql
3.配置redis缓存
用于存放用户session信息、短信验证码以及图片验证码信息等。
# 在虚拟机中安装django-redis
pip install -i https://pypi.douban.com/simple django-redis
# 在settings.py文件中指定redis配置
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://192.168.211.129:6379/0",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
}
如果不指定数据库,默认从0开始
4.配置日志器
用于记录系统运行过程中的各种日志信息。
在项目根目录中创建一个logs文件夹,用于存放日志文件
# 在setting.py文件中加入如下配置:
# 配置日志器,记录网站的日志信息
LOGGING = {
# 版本
'version': 1,
# 是否禁用已存在的日志器
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s'
},
'simple': {
'format': '%(levelname)s %(module)s %(lineno)d %(message)s'
},
},
'filters': {
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
'file': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(BASE_DIR, "logs/qiyu.log"), # 日志文件的位置
'maxBytes': 300 * 1024 * 1024,
'backupCount': 10,
'formatter': 'verbose'
},
},
'loggers': {
'django': { # 定义了一个名为django的日志器
'handlers': ['console', 'file'],
'propagate': True,
'level': 'INFO', # 日志器接收的最低日志级别
},
}
}
在根目录下创建一个logs文件夹,下面创建一个qiyu.log的文件
这是我们看到这个路径时不对的,因此我们要修改路径为:
os.path.dirname(BASE_DIR)
5.时区配置
# 修改语言
LANGUAGE_CODE = 'zh-hans'
# 修改时区
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
# utc 时间
USE_TZ = True
6.修改静态文件配置
在项目根目录中创建一个static目录,用于存放静态文件(css、js、image、font等)
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'), # 用于存放静态文件
]
在项目目录下创建一个static的文件夹,把他作为根目录:
7.创建应用
a.本项目主要由4个模块组成,分别为新闻文章模块、课程视频播放模块、文档下载模块、用户管理模块等。在项目根目录下创建一个apps目录用于存放各个子应用。
# 在虚拟机中,cd进入apps
cd apps
python ../../manage.py startapp news
python ../../manage.py startapp course
python ../../manage.py startapp doc
python ../../manage.py startapp users
注:…/…/的原因时现在settings文件路径多了一层目录,要找到manage.py文件,创建app
b.在settings.py文件中,加入如下配置
import sys
# 创建应用之后,把apps目录加入到sys.path中
sys.path.insert(0, BASE_DIR)
sys.path.insert(1, os.path.join(BASE_DIR, 'apps'))
c.分别在apps文件夹和项目根目录文件夹上右击,加入到Sources Root根中,优化导入路径
d.将应用加入到INSTALLED_APPS列表中
INSTALLED_APPS = [
# ...
'users', # 将应用加入到INSTALLED_APPS列表中
'course',
'doc',
'news',
]