1.基本配置信息
from pathlib import Path
# 项目路径
BASE_DIR = Path(__file__).resolve().parent.parent
# 秘钥配置
"""
主要用于重要数据的加密,提高项目的安全性,避免遭到攻击者恶意破坏。秘钥主要用户密码,CSRF机制和会话Session等数据加密
用户密码:
CSRF机制:
会话Session:
"""
SECRET_KEY = 'django-insecure-%@-)^ptx*@13lh3h1#b+uty5c7enie__okn@ibn7p!1!)jhjt*'
# 调试模式
DEBUG = True
# 域名访问权限
"""
ALLOWED_HOSTS 为空列表时,项目只允许以localhost或127.0.0.1在浏览器上访问。
当DEBUG为False时,ALLOWED_HOSTS为必填项,允许所有域名访问、可设置ALLOWED_HOSTS = ["*"]
"""
ALLOWED_HOSTS = []
# APP列表
INSTALLED_APPS = [
'django.contrib.admin', # 内置的后台管理系统
'django.contrib.auth', # 内置的用户认证系统
'django.contrib.contenttypes', # 记录项目中所有medel元数据(Django的ORM框架)
'django.contrib.sessions', # Session会话功能,用于标识当前访问网站的用户身份,记录相关用户信息
'django.contrib.messages', # 消息提示功能
'django.contrib.staticfiles', # 查找静态资源路径
]
2.资源文件配置
01.资源路由——STATIC_URL
默认情况下,Django只能识别项目应用App的static文件夹里面的静态资源
# 静态文件配置(CSS,js,img)
STATIC_URL = 'static/'
# books/static/iphone.jpeg
http://127.0.0.1:8000/static/iphone14.jpeg 404
# books/disposition/mystatic/nikon.jpeg
http://127.0.0.1:8000/static/nikang.jpeg 404
# books/disposition/static/macpro.jpeg 必须注册子应用
http://127.0.0.1:8000/static/macpro.jpeg 200
# 若 STATIC_URL = 'static/' 则浏览器访问静态资源的网站必须为static,并且 DEBUG = True(在调试模式)下只能识别app目录下的static文件(注册子应用)
02.资源集合——STATICFILES_DIRS
由于static_url的特殊性,在开发中会造成很多不便,比如将静态文件存放在项目的根目录以及定义多个静态文件。
# 解决404
"""
# books/static/iphone.jpeg
http://127.0.0.1:8000/static/iphone14.jpeg 404
# books/disposition/mystatic/nikon.jpeg
http://127.0.0.1:8000/static/nikang.jpeg 404
"""
# BASE_DIR / 'static' 设置根目录的静态资源文件
# BASE_DIR / 'disposition/mystatic' 设置子应用的静态资源文件
STATICFILES_DIRS = [BASE_DIR / 'static', BASE_DIR / 'disposition/mystatic']
STATIC_URL = 'allstatic/' # 名字可以更改
http://127.0.0.1:8000/allstatic/iphone14.jpeg
http://127.0.0.1:8000/allstatic/nikon.jpeg
http://127.0.0.1:8000/allstatic/macpro.jpeg
03.资源部署——STATIC_ROOT
static_root作用是在服务器上部署项目,实现服务器和项目之间的映射。static_root主要收集整个项目的静态资源并存放在一个新的文件夹,然后由该文件与服务器之间构建映射关系。
# 资源部署
STATIC_ROOT = BASE_DIR / 'allstatic'
# python manage.py collectstatic 收集静态文件指令
开发阶段用不到,当debug = False的时候django不在提供静态文件代理服务,此时需要设置static_root
04.媒体资源——MEDIA
http://127.0.0.1:8000/media/socks.avif
static_url是设置静态文件的路由地址,如css样式文件,js文件以及常用图片等。对于一些经常变动的资源,通常将其存放在媒体资源文件,如用户头像、歌曲文件等。媒体资源和静态资源是可以同时存在的,而且俩者可以独立运行,互不影响,而媒体资源只有配置属性media_url和media_root
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [
path('admin/', admin.site.urls),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
from django.conf import settings
from django.urls import re_path
from django.views.static import serve
urlpatterns = [
path('admin/', admin.site.urls),
re_path('media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT}, name='media'),
]
from django.conf import settings
from django.urls import re_path
from django.views.static import serve
if settings.DEBUG:
urlpatterns += [
re_path(
r"^media/(?P<path>.*)$",
serve,
{
"document_root": settings.MEDIA_ROOT,
},
),
]
3.模板配置
TEMPLATES = [
{
# 要使用的模板后端。内置的模板后端有:
# 'django.template.backends.django.DjangoTemplates'
# 'django.template.backends.jinja2.Jinja2'
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates',
BASE_DIR / 'disposition/templates'], # 按照搜索顺序,告诉django应该查找模板源文件的目录。
'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',
], # 要传递给模板后台的额外参数。根据模板后端的不同,可用的参数也不同。一般不做任何修改
},
},
]
4.数据库配置
01.mysqlclient链接MySQL
https://pypi.org/project/mysqlclient/ ubuntu 安装报错解决方法
# 创建数据库
create database learn charset=utf8;
# 创建用户
CREATE USER 'leo'@'%' IDENTIFIED BY 'mysql';
# 授权用户权限
GRANT ALL ON learn.* TO 'leo'@'%';
# 刷新
flush privileges;
# 测试连接
mycli -uleo -pmysql
# django支持 PostgreSQL、MariaDB、MySQL、Oracle 和 SQLite。
pip install mysqlclient
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'learn',
'USER': 'leo',
'PASSWORD': 'mysql',
'HOST': '127.0.0.1',
'POST': '3306',
}
}
python manage.py migrate # 迁移数据库
# 默认表
+----------------------------+
| Tables_in_learn |
+----------------------------+
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
+----------------------------+
02.pymysql连接mysql
# pip install pymysql
03.多个数据库的连接方式
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'learn',
'USER': 'leo',
'PASSWORD': 'mysql',
'HOST': '127.0.0.1',
'POST': '3306',
},
'test': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test',
'USER': 'leo',
'PASSWORD': 'mysql',
'HOST': '127.0.0.1',
'POST': '3306',
}
}
# 指定数据库迁移
python manage.py migrate --database test
04.使用数据库文件动态连接数据库
创建一个Django项目,执行python manage.py migrate,之后随便删除一个表怎么恢复?
# BASE_DIR/mysql.cnf
[client]
database=dynamically
user=leo
password=mysql
host=127.0.0.1
port=3306
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {'read_default_file': str(BASE_DIR / 'mysql.cnf')}
}
}
05.通过ssh隧道远程连接MySQL
pip install sshtunnel
# 数据库服务器的ip地址或主机名
ssh_host = "192.168.23.128"
# 数据库服务器的SSH连接端口号,一般都是22,必须是数字
ssh_port = 22
# 数据库服务器的用户名
ssh_user = "zjx"
# 数据库服务器的用户密码
ssh_password = "jianxin"
# 数据库服务器的mysql的主机名或ip地址
mysql_host = "localhost"
# 数据库服务器的mysql的端口,默认为3306,必须是数字
mysql_port = 3306
# 数据库服务器的mysql的用户名
mysql_user = "leo"
# 数据库服务器的mysql的密码
mysql_password = "mysql"
# 数据库服务器的mysql的数据库名
mysql_db = "secure_shell"
from sshtunnel import open_tunnel
def get_ssh():
server = open_tunnel(
(ssh_host, ssh_port),
ssh_username=ssh_user,
ssh_password=ssh_password,
# 绑定服务器的MySQL数据库
remote_bind_address=(mysql_host, mysql_port))
# ssh通道服务启动
server.start()
return str(server.local_bind_port)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': mysql_db,
'USER': mysql_user,
'PASSWORD': mysql_password,
'HOST': mysql_host,
'PORT': get_ssh(),
}
}
5.中间件
中间件(Middleware)是一个用来处理Django的请求和响应的框架级别的钩子,他是一个轻量、低级别的插件系统,用于在全范围内改变django的输入和输出
当用户在网站中进行某个操作时,这个过程是用户向网站发送HTPP请求,而网站会根据用户的操作返回相关的网页内容,这个过程称为响应处理。从请求到响应的过程中,当Django接受到用户请求时,首先经过中间件处理请求信息,执行相关的处理,然后将处理结果返回给用户。
# 中间件
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware', # 内置的安全机制,保护用户与网站的通信安全。
'django.contrib.sessions.middleware.SessionMiddleware', # 会话Session功能
# 添加
'django.middleware.locale.LocaleMiddleware', # LocaleMiddleware django内置功能支持中文显示
'django.middleware.common.CommonMiddleware', # 处理请求信息,规范化请求内容
'django.middleware.csrf.CsrfViewMiddleware', # 开启CSRF防护功能
'django.contrib.auth.middleware.AuthenticationMiddleware', # 开启内置的用户认证系统
'django.contrib.messages.middleware.MessageMiddleware', # 开启内置的信息提示功能
'django.middleware.clickjacking.XFrameOptionsMiddleware', # 防止恶意程序单击劫持
]