文章目录
基础
配置文件settings.py
阶段 | 类型 | 修改的变量 | 示例 |
---|---|---|---|
开发阶段 | 调试模式 | DEBUG | DEBUG = True |
域名访问 | ALLOWED_HOSTS | ALLOWED_HOSTS = [] | |
配置app | INSTALLED_APPS | 插入app | |
配置中间件 | MIDDLEWARE | 插入LocaleMiddleware | |
配置模板 | TEMPLATES | 更改DIRS | |
配置数据库 | DATABASES | ||
配置国际化与本地化 | LANGUAGE_CODE 、TIME_ZONE | 修改语言为中文,时区为上海 | |
配置静态资源 | STATICFILES_DIRS | STATIC_URL 不更改不删除 | |
配置媒体资源 | MEDIA_URL、STATICFILES_DIRS | ||
上线阶段 | 调试模式 | DEBUG | DEBUG = False |
域名访问 | ALLOWED_HOSTS | ALLOWED_HOSTS = ['*'] | |
配置数据库 | DATABASES | 更改HOST,设置为公网ip | |
配置静态资源 | STATIC_ROOT | STATIC_URL 和 STATICFILES_DIRS 不用删除 |
调试模式DEBUG
DEBUG参数真正决定django处于什么阶段。
# 开发阶段
DEBUG = True
# 上线阶段
DEBUG = False
配置模板
templates位置存在多种情形:
- 整个项目只有一个templates
# 根目录下的templates
'DIRS': [BASE_DIR / 'templates']
# 项目下的templates
'DIRS': [BASE_DIR / 'MyDjango/templates']
- 各个app下的templates
# app下的模板文件的名字默认为templates
'DIRS': []
# app下的模板文件的名字更改
'DIRS': [BASE_DIR / 'myapp/temps', BASE_DIR / 'myapp2/temps']
无论哪种,'APP_DIRS’都要设为True
静态资源
有三个变量要配置:
- STATIC_URL
STATIC_URL = '/static/'
,Django自动在app的static文件夹(自己创建)找静态资源,static名字不可更改 - STATICFILES_DIRS
DEBUG = True
开发阶段时
STATICFILES_DIRS = [BASE_DIR / 'develop_static']
,Django在任意位置的static文件夹(任意取名)找静态资源。 - STATIC_ROOT
DEBUG = False
上线阶段时,Django不再提供静态文件代理服务。 必须让Web服务器(如Nginx)管理静态资源。
开发者需要执行manage.py命令collectstatic:自动收集所有静态资源,并存入自动创建 的STATIC_ROOT的文件夹中。
媒体资源
有两个变量要配置:
- MEDIA_URL
本质类似 STATIC_URL,Django自动在app的media文件夹(自己创建)找媒体资源。 - MEDIA_ROOT
本质类似STATICFILES_DIRS 和 STATIC_ROOT,不区分开发、上线阶段,Django在任意位置的media文件夹(任意取名)找媒体资源。
初始化数据库
mysql-8版本连接django问题
因为mysql8版本加密方式改变,采用CHA2加密。不做处理,直接连接会报错。
- 方法1
安装python包:pip install cryptography
- 方法2(推荐)
更改mysql的加密方式。在mysql中输入:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; FLUSH PRIVILEGES;
。用户名为root,密码为123456。
mysql中创建数据库
数据库名:mydb
# mysql中
CREATE DATABASE IF NOT EXISTS mydb DEFAULT CHARACTER SET utf8;
数据迁移
初始时,创建内置功能(如Auth)的数据表。
python manage.py makemigrations # 生成迁移文件
python manage.py migrate # 生成数据表
MyDjango 实例
MyDjango/ settings.py
- 整个项目只有一个templates:根目录下的templates
- 开发阶段,整个项目只有一个static:根目录下的develop_static
- 整个项目只有一个media:根目录下的media
MyDjango/ init.py
__init__.py
- 用 pymysql 连接数据库
初始化数据库
详情看此篇文章的基础部分的初始化数据库