[实验] Django 多表的实现 (一对一版)

注意:

文中的 python 系统名、mysite 项目、user 应用 Student 类和 Scard 类只是站主在本次操作中随意取的名称,读者可以根据自己的喜好换成任意别的名称

正文:

步骤一:系统环境要求

1) 服务器的系统需要是 openSUSE 15.2 版本
2) 服务器要关闭防火墙
3) 服务器系统要配置好可用的软件源(最好是软件数量最多的官方版本)
4) 服务器要能够连接外网

步骤二:安装 Django

2.1 安装 Python3

[root@python ~]# zypper -n install python3

(补充:在此次操作发生时,最新的 python 版本是 3.6.12)

2.2 创建并进入 Django 项目的目录

[root@python ~]# mkdir project
[root@python ~]# cd project

2.3 将 Django 项目的目录指定为 Django 环境

[root@python project]# python3 -m venv django_env

2.4 进入 Django 环境

[root@python project]# source django_env/bin/activate
(django_env) [root@python project]# pip install django

(补充:在此次操作发生时,最新的 Django 版本是 3.2)

步骤三:创建 mysite 项目

3.1 创建 mysite 项目

(django_env) [root@python project]# django-admin startproject mysite

3.2 mysite 项目的目录

3.2.1 安装 tree 目录显示软件
(django_env) [root@python project]# zypper -n install tree
3.2.2 显示 mysite 项目的目录
(django_env) [root@python project]# cd mysite
(django_env) [root@python mysite]# tree
.
├── manage.py
└── mysite
    ├── __init__.py
    ├── asgi.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

1 directory, 5 files
3.3.3 Django 项目目录介绍

1) mysite 此 Django 项目的容器
2) manage.py 命令行工具,与 Django 项目进行交互
3) mysite/__init__.py 空文件,通知 Python 此项目是 1 个 Python 包
4) mysite/settings.py 此 Django 项目的配置文件
5) mysite/urls.py 此 Django 项目的 URL 声明和 Django 的网站“目录”
6) mysite/wsgi.py WSGI 兼容 Web 服务器的入口

步骤四:创建 user 应用

4.1 创建 user 应用

(django_env) [root@python mysite]# django-admin startapp user

4.2 user 应用的目录

4.2.1 显示 user 应用的目录
(django_env) [root@python mysite]# tree
.
├── manage.py
├── mysite
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── user
    ├── __init__.py
    ├── admin.py
    ├── apps.py
    ├── migrations
    │   └── __init__.py
    ├── models.py
    ├── tests.py
    └── views.py

3 directories, 13 files
4.2.2 Django 应用目录介绍

1) user/app.py 此 Django 应用的容器
2) user/__init__.py 空文件,通知 Python 此项目是 1 个 Python 包
3) user/admin.py 此 Django 应用自带的后台管理相关的类
4) user/app.py 此 Django 应用指定应用名的文件
5) user/migrations.py 此 Django 应用通过 python 代码生成数据库表时里面会产生一些迁移文件
6) user/models.py 可以在里面创建一些 Python 对象并通过这些对象在数据库里创建对应的表
7) user/test.py 此 Django 应用的测试文档
8) user/views.py 此 Django 应用的视图,接收前端数据,把数据传递给后端,响应相关页面

4.3 在 mysite 应用中导入 user 应用

在 mysite/mysite/settings.py 中添加以下内容:

......
INSTALLED_APPS = [
......
    'user',
]
......

步骤五:实现连接 MariaDB 数据库

5.1 安装 MairaDB 数据库和客户端

(django_env) [root@python mysite]# zypper -n install mariadb mariadb-devel mariadb-server mariadb-client

5.2 创建用于 Django 的 MairaDB 的库和用户

5.2.1 进入 MairaDB 数据库
(django_env) [root@python mysite]# mysql -h 127.0.0.1 -p
5.2.2 创建用于 Django 的库
MariaDB [(none)]> create database user;

(补充:这里以创建 post 库为例)

5.2.3 创建用于 Django 的用户
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

(补充:这里以创建 root 用户,密码是 password 为例)

5.2.4 刷新权限
MariaDB [(none)]> flush privileges;

5.3 退出 MariaDB 数据库

MariaDB [(none)]> exit

5.4 重启 MariaDB

(django_env) [root@python mysite]# systemctl restart mariadb

步骤六:搭建用于 Django 的 MariaDB 数据库环境

6.1 安装 Django 连接 MariaDB 的模块

(django_env) [root@python mysite]# pip3 install hexdump
(django_env) [root@python mysite]# pip3 install pymysql

6.2 在 mysite 应用中添加 Django 连接 MariaDB 的模块

在 mysite/mysite/__init__.py 中添加以下内容:

import pymysql
pymysql.install_as_MySQLdb()

6.3 在 user 应用数据库模板中添加 Student 类和 Scard 类

在 mysite/user/models.py 中添加以下内容:

......
class Student(models.Model):
    sno = models.AutoField(primary_key=True)
    sname = models.CharField(max_length=30)

    def __str__(self):
        return u'Student:%s'%self.sname

class Scard(models.Model):
    student = models.OneToOneField(Student,primary_key=True,on_delete=models.CASCADE)
    major = models.CharField(max_length=30,unique=True)

    def __str__(self):
         return u'Scard:%s'%self.major


补充:
1) 这里的这条语句会让 Student 类中 sname 字段以 Student: 的列表形式显示出来:
def __str__(self):
return u’Student:%s’%self.sname
2) 这里的这条语句会让 Scard 类中 major 字段以 Scard: 的列表形式显示出来:
def __str__(self):
return u’Scard:%s’%self.major
3) 这里的 CASCADE 是指级连,默认就算这里没写也会有,它是引用不用加括号

(注意:student =…… 后面的一长串字母和数字其实是一行,这里因为是显示问题所以看上去是两行)

6.4 在 mysite 应用中设置连接到 MariaDB 数据库

将 mysite/mysite/settings.py 中的以下内容:

......
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}
......

修改为:

......
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'user',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': 'password',
    }
}
......


补充:这里以
1) 使用的库是 user
2) 使用的服务器是 127.0.0.1
3) 使用的端口是 3306
4) 使用的用户是 root
5) 使用的密码是 password
为例

6.5 生成牵引文件

(django_env) [root@python mysite]# python3 manage.py makemigrations
Migrations for 'user':
  user/migrations/0001_initial.py
    - Create model Student
    - Create model Scard

(补充:这里以将 users 应用的 model 模块转换成牵引文件为例)

6.6 将牵引文件导入 MariaDB 数据库

(django_env) [root@python mysite]# python3 manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, post, 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 auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying post.0001_initial... OK
  Applying sessions.0001_initial... OK

6.7 查看导入到 MariaDB 数据库的表

6.7.1 进入 MariaDB 数据库
(django_env) [root@python mysite]# mysql -uroot -p
6.7.2 查看所有的库
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| user               |
+--------------------+
4 rows in set (0.001 sec)
6.7.3 进入 user 库
MariaDB [(none)]> use user;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
6.7.4 查看 user 库里所有的表
MariaDB [(user)]> show tables;
+----------------------------+
| Tables_in_user             |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
| user_scard                 |
| user_student               |
+----------------------------+
12 rows in set (0.001 sec)
6.7.5 查看 user_student 表和 user_scard 表里的数据
MariaDB [user]> select * from user_scard;
Empty set (0.001 sec)

MariaDB [user]> select * from user_student;
Empty set (0.001 sec)
6.7.6 查看 user_student 表和 user_scard 表的表结构
MariaDB [user]> desc user_scard;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| student_id | int(11)     | NO   | PRI | NULL    |       |
| major      | varchar(30) | NO   | UNI | NULL    |       |
+------------+-------------+------+-----+---------+-------+
2 rows in set (0.004 sec)

MariaDB [user]> desc user_student;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| sno   | int(11)     | NO   | PRI | NULL    | auto_increment |
| sname | varchar(30) | NO   |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.002 sec)
6.7.7 退出 MariaDB 数据库
MariaDB [(user)]> quit();

步骤七:测试 Django 一对一多表

7.1 配置 Django 环境

7.1.1 进入 Python 环境
(django_env) [root@python mysite]# python3
7.1.2 引入 os 模块和 django 模块
>>> import os,django
7.1.3 调用 mysite.settings 的配置
>>> os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
'mysite.settings'
7.1.4 让刚刚的调用生效
>>> django.setup()
7.1.5 调用 mysite 项目 user 应用 models 模块里的所有内容
>>> from user.models import *

7.2 插入一对一多表数据

7.2.1 插入第 1 条数据
>>> stu = Student(sname='zhangsan')
>>> stu.save()

>>> sc = Scard(student=stu,major='computer')
>>> sc.save()

(补充:这里以随意插入 1 条数据为例)

7.2.2 插入第 2 条数据
>>> stu1 = Student.objects.create(sname='lisi')
>>> Scard.objects.create(student=stu1,major='math')

(补充:这里以随意插入 1 条数据为例)

7.3 查看一对一多表数据

7.3.1 查看一对一多表数据的性质

1) 这里从 Student 表到 Scard 表的查询正向查询
2) 这里从 Scard 表到 Student 表的查询逆向查询

7.3.2 正向查询数据
>>> Student.objects.first().scard
<Scard: Scard:computer>
7.3.3 逆向查询数据
>>> Scard.objects.first().student
<Student: Student:zhangsan>

[内容] MariaDB & MySQL 多表关系

内容一:一对一关系

1.1 通常实现方法

唯一外键

1.2 典型案例

学生表和学生证表

内容二:一对多关系

2.1 通常实现方法

主外键

2.2 典型案例

学生表和班级表

内容三:多对多关系

3.1 通常实现方法

中间表加联合主键

(补充:联合主键是指一张表中有两个主键,这两个主键叫联合主键,每一条数据里的联合主键可以相互之间拼凑成一个新的主键,联合主键可以重复,只要保证这个新的主键唯一即可)

3.2 典型案例

学生和课程

[步骤] Django 数据迁移失败的修复

步骤一:删除迁移文件

删除此文件:

<Django project>.<Django app>.migrations.0001_inital.py

步骤二:删除生成的自定义数据表

在数据库里删除以下模版里自定义生成的表:

<Django project>.<Django app>.models.py

步骤三:在数据库里删除迁移记录

在数据库中删除以下表中:

django_migrations

的以下数据

0001_initial

步骤四:重新开始数据的迁移

(步骤略)

[实验] Django 单表数据的操作 (通过自带应用 admin 实现) (MariaDB版)

注意:

文中的 python 系统名、mysite 项目、post 应用和 Post 类只是站主在本次操作中随意取的名称,读者可以根据自己的喜好换成任意别的名称

正文:

步骤一:系统环境要求

1) 服务器的系统需要是 openSUSE 15.2 版本
2) 服务器要关闭防火墙
3) 服务器系统要配置好可用的软件源(最好是软件数量最多的官方版本)
4) 服务器要能够连接外网

步骤二:安装 Django

2.1 安装 Python3

[root@python ~]# zypper -n install python3

(补充:在此次操作发生时,最新的 python 版本是 3.6.12)

2.2 创建并进入 Django 项目的目录

[root@python ~]# mkdir project
[root@python ~]# cd project

2.3 将 Django 项目的目录指定为 Django 环境

[root@python project]# python3 -m venv django_env

2.4 进入 Django 环境

[root@python project]# source django_env/bin/activate
(django_env) [root@python project]# pip install django

(补充:在此次操作发生时,最新的 Django 版本是 3.2)

步骤三:创建 mysite 项目

3.1 创建 mysite 项目

(django_env) [root@python project]# django-admin startproject mysite

3.2 mysite 项目的目录

3.2.1 安装 tree 目录显示软件
(django_env) [root@python project]# zypper -n install tree
3.2.2 显示 mysite 项目的目录
(django_env) [root@python project]# cd mysite
(django_env) [root@python mysite]# tree
.
├── manage.py
└── mysite
    ├── __init__.py
    ├── asgi.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

1 directory, 5 files
3.3.3 Django 项目目录介绍

1) mysite 此 Django 项目的容器
2) manage.py 命令行工具,与 Django 项目进行交互
3) mysite/__init__.py 空文件,通知 Python 此项目是 1 个 Python 包
4) mysite/settings.py 此 Django 项目的配置文件
5) mysite/urls.py 此 Django 项目的 URL 声明和 Django 的网站“目录”
6) mysite/wsgi.py WSGI 兼容 Web 服务器的入口

步骤四:创建 post 应用

4.1 创建 post 应用

(django_env) [root@python mysite]# django-admin startapp post

4.2 post 应用的目录

4.2.1 显示 post 应用的目录
(django_env) [root@python mysite]# tree
.
├── manage.py
├── mysite
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── post
    ├── __init__.py
    ├── admin.py
    ├── apps.py
    ├── migrations
    │   └── __init__.py
    ├── models.py
    ├── tests.py
    └── views.py

3 directories, 13 files
4.2.2 Django 应用目录介绍

1) movies/app.py 此 Django 应用的容器
2) movies/__init__.py 空文件,通知 python 此项目是 1 个 Python 包
3) movies/admin.py 此 Django 应用自带的后台管理相关的类
4) movies/app.py 此 Django 应用指定应用名的文件
5) movies/migrations.py 此 Django 应用通过 python 代码生成数据库表时里面会产生一些迁移文件
6) movies/models.py 可以在里面创建一些 Python 对象并通过这些对象在数据库里创建对应的表
7) movies/test.py 此 Django 应用的测试文档
8) movies/views.py 此 Django 应用的视图,接收前端数据,把数据传递给后端,响应相关页面

4.3 在 mysite 应用中导入 post 应用

在 mysite/mysite/settings.py 中添加以下内容:

INSTALLED_APPS = [
    'post',
]

步骤五:搭建用于 Django 的 MariaDB 数据库环境

5.1 安装 MairaDB 数据库和客户端

(django_env) [root@python mysite]# zypper -n install mariadb mariadb-devel mariadb-server mariadb-client

5.2 创建用于 Django 的 MairaDB 的库和用户

5.2.1 进入 MairaDB 数据库
(django_env) [root@python mysite]# mysql -h 127.0.0.1 -p
5.2.2 创建用于 Django 的库
MariaDB [(none)]> create database post;

(补充:这里以创建 post 库为例)

5.2.3 创建用于 Django 的用户
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

(补充:这里以创建 root 用户,密码是 password 为例)

5.2.4 刷新权限
MariaDB [(movies)]> flush privileges;

5.3 退出 MariaDB 数据库

MariaDB [(none)]> exit

5.4 重启 MariaDB

(django_env) [root@python mysite]# systemctl restart mariadb

步骤六:实现连接 MariaDB 数据库

6.1 安装 Django 连接 MariaDB 的模块

(django_env) [root@python mysite]# pip3 install hexdump
(django_env) [root@python mysite]# pip3 install pymysql

6.2 在 mysite 应用中添加 Django 连接 MariaDB 的模块

在 mysite/mysite/__init__.py 中添加以下内容:

......
import pymysql
pymysql.install_as_MySQLdb()

6.3 在 post 应用数据库模板中添加 Post 类

6.3.1 在 post 应用数据库模板中添加 Post 类

在 mysite/users/models.py 中添加以下内容:

......
class Post(models.Model):
    pid = models.AutoField(primary_key=True)
    title = models.CharField(max_length=100,unique=True)
    content = models.TextField()
    create = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now_add=True)
    email = models.EmailField()
    isdelete = models.BooleanField(default=False)
    access_count = models.PositiveIntegerField() 
    price = models.DecimalField(max_digits=5,decimal_places=2)
    file = models.ImageField(upload_to='upload/images')

    def __str__(self):
        return u'Post:%s,%s’%(self.title,self.access_count)

    class Meta:
        db_table = 't_post'


补充:
1) 如果在 create = models.DateTimeField(auto_now_add=True) 和 modified = models.DateTimeField(auto_now_add=True) 中删除了 auto_now_add=True,则它们可以直接在后端管理页面里显示了,否则的话它们只会在后端自动生成而不显示
2) 这里的这条语句会让 Post 类中 title 字段和 access_count 字段以 Post:<title value>,<access_count value> 的列表形式显示出来:

    def __str__(self):
        return u'Post:%s,%s’%(self.title,self.access_count)

3) 这里的这条语句会将表明指定为 t_post

    class Meta:
        db_table = 't_post'

6.3.2 安装 models.ImageField 字段所需模块
(django_env) [root@python mysite]# pip3 install Pillow

6.4 在 mysite 应用中设置连接到 MariaDB 数据库

将 mysite/mysite/settings.py 中的以下内容:

......
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}
......

修改为:

......
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'post',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': 'password',
    }
}
......


补充:这里以
1) 使用的库是 post
2) 使用的服务器是 127.0.0.1
3) 使用的端口是 3306
4) 使用的用户是 root
5) 使用的密码是 password
为例

6.5 生成牵引文件

(django_env) [root@python mysite]# python3 manage.py makemigrations
Migrations for 'post':
  post/migrations/0001_initial.py
    - Create model Post

(补充:这里以将 users 应用的 model 模块转换成牵引文件为例)

6.6 将牵引文件导入 MariaDB 数据库

(django_env) [root@python mysite]# python3 manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, post, 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 auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying post.0001_initial... OK
  Applying sessions.0001_initial... OK

6.7 查看导入到 MariaDB 数据库的表

6.7.1 进入 MariaDB 数据库
(django_env) [root@python mysite]# mysql -uroot -h127.0.0.1 -p
6.7.2 查看所有的库
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| post               |
+--------------------+
4 rows in set (0.001 sec)
6.7.3 进入 post 库
MariaDB [(post)]> use post;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
6.7.4 查看 test 库里所有的表
MariaDB [(post)]> show tables;
+----------------------------+
| Tables_in_test             |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
| t_post                     |
+----------------------------+
11 rows in set (0.001 sec)
6.7.5 查看 t_post 表里的数据
MariaDB [(post)]> select * from t_post;
Empty set (0.001 sec)
6.7.6 查看 t_post 表的表结构
MariaDB [(post)]> desc t_post;
+--------------+------------------+------+-----+---------+----------------+
| Field        | Type             | Null | Key | Default | Extra          |
+--------------+------------------+------+-----+---------+----------------+
| pid          | int(11)          | NO   | PRI | NULL    | auto_increment |
| title        | varchar(100)     | NO   | UNI | NULL    |                |
| content      | longtext         | NO   |     | NULL    |                |
| create       | datetime(6)      | NO   |     | NULL    |                |
| modified     | datetime(6)      | NO   |     | NULL    |                |
| email        | varchar(254)     | NO   |     | NULL    |                |
| isdelete     | tinyint(1)       | NO   |     | NULL    |                |
| access_count | int(10) unsigned | NO   |     | NULL    |                |
| price        | decimal(5,2)     | NO   |     | NULL    |                |
| file         | varchar(100)     | NO   |     | NULL    |                |
+--------------+------------------+------+-----+---------+----------------+
10 rows in set (0.006 sec)
6.7.7 退出 MariaDB 数据库
MariaDB [(post)]> quit();

步骤七:设置 admin 应用

7.1 在 Django 自带的 admin 应用中导入数据库模版中的 post 类

在 mysite/users/admin.py 中添加以下内容:

......
from .models import Post

admin.site.register(Post)

(补充:这里以导入 models 的 Post 类为例)

7.2 设置 admin 应用的语言和时区

在 mysite/mysite/settings.py 中将以下内容:

......
LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'
......

修改为:

......
LANGUAGE_CODE = 'zh-Hans'

TIME_ZONE = 'Asia/Shanghai'
......

(补充:这里设置语言为汉语,时区为上海为例)

7.3 创建 admin 应用的账号

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

步骤八:启动 Django 服务

(django_env) [root@python mysite]# python3 manage.py runserver

步骤九:使用 admin 应用操作数据

1) 打开网页:

http://127.0.0.1:8000/admin/

2) 使用创建的 admin 模块的用户登录
3) 点击 Posts 后面的 “增加”
4) 可以看见刚刚创建的表格,并可以进行数据操作