第二章——Django 配置信息
1、静态资源和媒体资源
# settings.py
# Django只能识别项目应用APP的static文件夹的静态资源,这是由INSTALLED_APPS->django.contrib.staticfiles实现的
STATIC_URL = '/static/' # 静态资源路由
# 资源集合,列表中可设置多个访问静态资源的地址
STATICFILES_DIRS = [ BASE_DIR / 'StaticFiles']
# STATIC_ROOT主要收集整个项目的静态资源并存放在一个新的文件夹,然后由该文件夹与服务器之间构建映射关系
# 当项目的配置属性DEBUG设为True的时候,Django会自动提供静态文件代理服务(STATIC_URL),此时整个项目处于开发阶段,因此无须使用STATIC_ROOT。当配置属性DEBUG设为False的时候,意味着项目进入生产环境,Django不再提供静态文件代理服务,此时需要在项目的配置文件中设置STATIC_ROOT。
# 设置STATIC_ROOT需要使用Django操作指令collectstatic来收集所有静态资源,这些静态资源都会保存在STATIC_ROOT所设置的文件夹里。
STATIC_ROOT = BASE_DIR / 'Allstatic' # 资源部署
# 媒体资源:存放媒体信息,如音视频,文件等
MEDIA_URL = "/media/" # 媒体路由地址
MEDIA_ROOT = BASE_DIR / "media" # 媒体路径信息
# 项目urls.py 设置
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf.urls.static import static
from django.conf import settings
from django.views.static import serve
方式一
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
or
方式二
urlpatterns += [re_path("media/(?P<path>.*)", serve, {"document_root": settings.MEDIA_ROOT}, name='media')]
2、模板配置
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR, 'templates'], # 可自定义模板的位置 名称 templates 固定
'APP_DIRS': True, # 默认可以识别每个应用下的 templates
'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',
],
},
},
]
3、数据库配置
连接mysql举例:
安装
pip3 install pymysql
在项目(和settings.py同目录)下的__init__.py设置
import pymysql
pymysql.install_as_MySQLdb() # 设置数据库连接模块即可
MySQL配置方式
方式一:直接配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django_db', # 提前在MySQL中创建该名称的数据库
'USER':'root', # MySQL登录的用户名
'PASSWORD': '123', # MySQL登录的密码
'HOST':'127.0.0.1',
'PORT':'3306',
}
}
方式二:动态配置数据库连接
先创建一个连接数据库的配置信息,比如my.cnf
填写如下内容:
[client]
database=django_db
user=root
password=123
host=127.0.0.1
port=3306
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS':{'read_default_file':str(BASE_DIR / 'my.cnf')},
}
}
多数据库连接配置
多数据库下,如果没有指定具体存储到那个数据库,默认存储到default名的数据库下。
DATABASES = {
# 第一个数据库
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django_db0',
'USER':'root',
'PASSWORD': '123',
'HOST':'127.0.0.1',
'PORT':'3306',
},
# 第二个数据库
'mydjango': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django_db1',
'USER':'root',
'PASSWORD': '123',
'HOST':'127.0.0.1',
'PORT':'3306',
}
}
通过SSH隧道远程连接数据库
pip3 install sshtunnel
# 设置settings.py
# 数据库服务器的IP地址或主机名
ssh_host = 'XXX.XXX.XXX.XXX'
# 数据库服务器的SSH连接端口号,一般是22,必须是数字
ssh_port = 22
# 数据库服务器的用户名
ssh_user = 'root'
# 数据库服务器的密码
ssh_password = '123'
# 数据库服务器的mysql的主机名或IP
mysql_host = 'localhost'
# 数据库服务器的mysql的端口,默认是3306
mysql_port = 3306
# mysql的用户名
mysql_user = 'root'
# mysql的密码
mysql_password = '123'
# mysql的数据库名
mysql_db = 'mydjango'
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)
)
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(),
}
}
4、中间件介绍
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware', # 内置安全机制,保护用户和网络的通信安全
'django.contrib.sessions.middleware.SessionMiddleware', # 会话Session功能
'django.middleware.locale.LocaleMiddleware', # 国际化和本地化中间件
'django.middleware.common.CommonMiddleware', # 处理请求信息,规范化请求内容
'django.middleware.csrf.CsrfViewMiddleware', # 开启CSRF防护功能
'django.contrib.auth.middleware.AuthenticationMiddleware', # 开启内置的用户认证系统
'django.contrib.messages.middleware.MessageMiddleware', # 开启内置的信息提示功能
'django.middleware.clickjacking.XFrameOptionsMiddleware', # 防止恶意程序单机劫持
]
第三章——初探路由
1、反向解析
from django.shortcuts import reverse # 生成路由地址
from django.urls import resolve # 通过路由地址生成路由对象
reverse('index:mydate', args=args)
reverse('index:mydate', kargs=kargs)
result= resolve(reverse('index:mydate', args=args)) # 了解一下生成的对象有哪些方法和属性
2、重定向
from django.shortcuts import redirect # 指定跳转到指定的路由地址
redirect(reverse('index:mydate', args=args)) # 一种方式是使用路由
redirect('index:mydate', permanent=True) # 一种方式是使用路由命名,可以指定是否永久重定向