Docker 环境 Django 开发简介
1 准备环境
开发环境还是建议使用 Docker 来搭建,方便快捷。 不过 Django 的官方镜像已经弃用了,官方建议新版本使用 Python 官方提供的镜像来构建。
1Docker
2 ┗ Python == 3.9.12-buster
3 ┗ Django == 3.2.13 LTS
4 ┗ django-simpleui==2022.11.30
可以参考[https://github.com/Cuile/Docker-to-Python/tree/master/Django],提供了 Dockerfil、yml 文件,还提供全套使用命令。
2 创建项目
1# 创建项目
2$ django-admin startproject mysite
3$ cd mysite
4
5# 生成项目
6$ python manage.py startapp websrc
7# 运行项目测试
8$ python manage.py runserver 0.0.0.0:80
修改配置后,建议使用项目调试的方式启动,不要使用快捷命令,项目正常启动稳定运行后,再使用快捷命令。
1# settings.py
2
3# 任意地址都可以访问 Django
4ALLOWED_HOSTS = ['*']
5
6# 添加 simpleui 模板,和创建的项目
7INSTALLED_APPS = [
8 'simpleui',
9 'websrc',
10 '......',
11]
12
13# 这个与多语种有关,在项目初始阶段不要修改,后续添加了多语种支持再修改,否则会导致无法启动。
14# 具体参考(http://www.i18nguy.com/unicode/language-identifiers.html),有个傻逼教程,上来就改成 zh-CN 果然导致项目无法正常启动。
15# 正确的简体中文代码如下:
16LANGUAGE_CODE = 'zh-Hans'
17
18# 时区,上海就代表北京时间,这个不能写错,写错就启动不了
19# 具体参考(https://en.wikipedia.org/wiki/List_of_tz_database_time_zones),这里是标准的,有个傻逼教程非给写成 Asia/Beijing 导致怎么都起不来,太TMD的二逼了。
20# 正解的北京时间时区如下:
21TIME_ZONE = 'Asia/Shanghai'
22
23# 启动翻译,与上面的 LANGUAGE_CODE 设置相对应
24USE_I18N = True
25# 启动格式控制
26USE_L10N = True
27# 启动时区
28USE_TZ = True
3 创建管理员账号
1$ python manage.py createsuperuser
2Username: admin
3Email address: admin@example.com
4Password: **********
5Password (again): *********
6Superuser created successfully.
访问项目链接,比如"http://127.0.0.1:8000/admin/
4 创建数据模型
4.1 编辑 models.py 文件,改变模型
......
4.2 为模型的改变生成迁移文件
1$ python manage.py makemigrations websrc
2Migrations for 'websrc':
3 polls/migrations/0001_initial.py
4 - Create model Question
5 - Create model Choice
可以查看生成的SQL语句
1$ python manage.py sqlmigrate websrc 0001
4.3 应用数据库迁移
1$ python manage.py migrate
2Operations to perform:
3 Apply all migrations: admin, auth, contenttypes, polls, sessions
4Running migrations:
5 Rendering model states... DONE
6 Applying websrc.0001_initial... OK
5 向管理页面加入数据模型
1# websrc/admin.py
2
3from django.contrib import admin
4
5from .models import Question
6
7admin.site.register(Question)
6 Gunicorn 托管 Django
6.1 安装 Gunicorn
参考文档
6.2 收集静态文件
1$ python manage.py collectstatic
2# 如果报错
3django.core.exceptions.ImproperlyConfigured: You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path.
需要修改 settings.py ,添加 STATIC_ROOT
1# <myproject>/settings.py
2
3# STATICFILES_DIRS = [os.path.join(BASE_DIR, "static"), ]
4STATIC_ROOT = os.path.join(BASE_DIR, "static")
如果你从 INSTALLED_APPS 中删除一个应用程序,最好使用 collectstatic --clear 选项来删除过时的静态文件。
参考文档
6.3 设置静态文件路由
1# <myproject>/urls.py
2
3...
4urlpatterns = [
5 ...
6] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
参考文档
7 Supervisor 启动 Gunicorn
注意:使用 docker 时,要确保 nodaemon 选项为 true,否则 docker 不能正常启动
1[supervisord]
2nodaemon=true
参考文档