使用Docker搭建Django和MySQL的开发环境(第2部分)

這是第一個。

我想要在第二个做的事情。

    1. 检查Django的启动界面

 

    1. 进行迁移(创建数据库)。

 

    从管理页面确认表格。

创建Django项目。

首先进入Django容器。
(请参阅第1步”确认要做的事情1″)

$ docker exec -it 4d3 /bin/bash
root@4d3ce7afcc31:/src#

使用以下命令创建Django项目。

django-admin startproject <プロジェクト名>

这次项目的名称我定为「django_project」。

root@4d3ce7afcc31:/src# django-admin startproject django_project
image.png

确认想做的事情1。

1. 检查Django的启动界面

进入使用cd命令创建的django_project后,执行以下命令。

python3 manage.py runserver 0.0.0.0:8000
root@4d3ce7afcc31:/src# cd django_project
root@4d3ce7afcc31:/src/django_project# python3 manage.py runserver 0.0.0.0:8000
Performing system checks...

System check identified no issues (0 silenced).

You have 15 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

June 15, 2019 - 09:26:48
Django version 2.1.5, using settings 'django_project.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
image.png

创建模型

模型可以随便选择,但这次我们将创建以下三个模型(请根据需要进行更改和定制):
– 共用的BaseModel
– 员工信息Employees
– 部门信息Departments

请在创建模型之前为每个应用程序创建应用程序。
* 请先使用cd命令进入使用startproject <项目名称>创建的项目中,然后执行该操作。

django-admin startapp <アプリケーション名>

创建实际的基础应用程序命令

root@4d3ce7afcc31:/src# cd django_project/
root@4d3ce7afcc31:/src/django_project# django-admin startapp base
image.png

请用这种方式创建名为“员工”和“部门”的应用程序。

root@4d3ce7afcc31:/src/django_project# django-admin startapp employees
root@4d3ce7afcc31:/src/django_project# django-admin startapp departments

我们需要将模型写在每个应用程序的models.py文件中。

■ 共通模型
※如果不在Meta类中写入abstract = True,迁移执行时将会出错!

from django.db import models

# 共通モデル
class BaseModel(models.Model):
    class Meta(object):
        abstract = True
        ordering = ('pk', )

    created_date = models.DateField(auto_now_add=True)
    updated_date = models.DateField(auto_now=True)

■员工模式

from django.db import models
from base.models import BaseModel
from departments.models import Department

# Create your models here.
class Employees(BaseModel):
    full_name = models.CharField(null=False, blank=True, max_length=100)
    first_name = models.CharField(null=False, blank=True, max_length=100)
    last_name = models.CharField(null=False, blank=True, max_length=100)
    birthday = models.DateField()
    age = models.IntegerField()
    email = models.EmailField(max_length=256)
    department = models.ForeignKey(Department, on_delete=models.CASCADE)

■模型部署

from django.db import models
from base.models import BaseModel

# Create your models here.
class Department(BaseModel):
    code = models.CharField(null=False, blank=True, max_length=3)
    name = models.CharField(null=False, blank=True, max_length=100)

创建迁移文件

在settings.py中,添加三个已创建的应用程序,并修正数据库连接信息。

.
..
...
INSTALLED_APPS = [
    .
    ..
    ...
    'base',
    'departments',
    'employees',
]
...
..
.
DATABASES = {
    'default': {
        'ENGINE' : 'django.db.backends.mysql'
        , 'NAME' : 'db_maria'#←.envの<MYSQL_DATABASE>
        , 'USER' : 'user'#←.envの<MYSQL_USER>
        , 'PASSWORD' : 'user'#←.envの<MYSQL_PASSWORD>
        , 'HOST' : '172.20.0.3' #←docker-compose.yml内mysqlに指定したIPAddress
        , 'PORT' : '3306'
        ,
    }
}
...
..
.

请在进行迁移时,创建迁移文件。
※请确保您已使用命令”startproject <项目名称>”创建了项目,并在使用cd命令切换到该项目后进行操作。

python3 manage.py makemigrations

以下是执行结果。
在migrations文件夹下创建了迁移文件。

root@4d3ce7afcc31:/src/django_project# python3 manage.py makemigrations
Migrations for 'departments':
  departments/migrations/0001_initial.py
    - Create model Department
Migrations for 'employees':
  employees/migrations/0001_initial.py
    - Create model Employees

确认我想做的事情2。

‘2. 进行迁移(创建数据库)。

同样地,用”startproject <项目名>”创建的项目(省略部分)。

python3 manage.py migrate

以下是实际执行结果。

root@4d3ce7afcc31:/src/django_project# python3 manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying sessions.0001_initial... OK
  Applying departments.0001_initial... OK
  Applying employees.0001_initial... OK

只要在”base”以外的”employees”和”departments”上,没有出现错误并显示出”OK”,就算完成。

如果出现错误,请确认mysql容器是否已启动,以及settings.py中DB连接信息是否正确。您可以使用docker ps命令来查看当前正在运行的容器。如果其中没有出现mysql容器,则说明它尚未启动,请使用docker start 或来启动,并重新进行迁移操作。

确认想要做的事情3。

3. 通过管理界面检查表格

使用管理界面可以注册应用程序。
修改除了“base”之外的“employees”和“departments”的admin.py。
顺便一提,即使将“from .models”更改为“from models”,在代码补全中也会正确显示目标模型,但在启动Django服务器时会出现错误,请注意∑(゚Д゚)。

from django.contrib import admin
from .models import Employees

# Register your models here.
admin.site.register(Employees)
from django.contrib import admin
from .models import Department

# Register your models here.
admin.site.register(Department)

下一步是注册管理员。
请使用类似以下的命令:startproject <项目名称>(以下简称)。

python3 manage.py createsuperuser

实际执行示例

root@4d3ce7afcc31:/src/django_project# python3 manage.py createsuperuser
Username (leave blank to use 'root'): admin
Email address:
Password:
Password (again):
This password is too short. It must contain at least 8 characters.
This password is too common.
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.

如果密码太短,将显示红色警告提示,但你可以选择“y”继续进行。

最后,启动Django服务器,并访问管理界面。
http://localhost:8000/admin

image.png
image.png

以上

将管理界面本地化为日语

将settings.py文件按以下方式进行修改,即可将管理界面进行日语化。
※如果当前已经打开了管理界面,请在修改settings.py后登出并重新登录。

...
..
.
# こっちはコメントアウト
# LANGUAGE_CODE = 'en-us'
# TIME_ZONE = 'UTC'

# 管理画面が日本語化される。
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
...
..
.
image.png

在执行 createsuperuser 前,如果更改了这个描述,那么在执行 createsuperuser 时就会出现错误,请注意。

只需一个选项,将以下内容用中文进行本地化:
我想要settings.py文件保持原样然后创建超级用户!!!适用于那些希望用复制粘贴的方式进行操作的人。

export PYTHONIOENCODING="UTF-8"; python3 manage.py createsuperuser
广告
将在 10 秒后关闭
bannerAds