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

参考文档

相关专栏文章