[实验] Django 根据数据库表结构生成数据库模型的实现

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

正文:

步骤目录:

步骤一:系统环境要求

步骤二:安装 Django
2.1 安装 Python3
2.2 创建并进入 Django 项目的目录
2.3 将 Django 项目的目录指定为 Django 环境
2.4 进入 Django 环境

步骤三:创建 mysite 项目
3.1 创建 mysite 项目
3.2 mysite 项目的目录
3.2.1 安装 tree 目录显示软件
3.2.2 显示 mysite 项目的目录
3.3.3 Django 项目目录介绍

步骤四:创建 movies 应用
4.1 创建 movies 应用
4.2 movies 应用的目录
4.2.1 显示 movies 应用的目录
4.2.2 Django 应用目录介绍

步骤五:实现 movies 应用的层级多链接
5.1 在 mysite 应用中添加一个链接并链接 movies 的链接
5.2 在 mysite 应用中导入 movies 应用

步骤六:实现连接 MariaDB 数据库
6.1 安装 MairaDB 数据库和客户端
6.2 安装 Django 连接 MariaDB 的模块
6.3 在 mysite 应用中添加 Django 连接 MariaDB 的模块
6.4 创建用于 Django 的 MairaDB 的库、表、数据和用户并插入测试数据
6.4.1 进入 MairaDB 数据库
6.4.2 创建用于 Django 的库
6.4.3 创建用于 Django 的表
6.4.3.1 进入用于 Django 到库
6.4.3.2 创建用于 Django 的表
6.4.3.3 查看刚创建的表的表结构
6.4.4 创建用于 Django 的数据
6.4.4.1 进入用于 Django 到库
6.4.4.2 创建用于 Django 的数据
6.4.4.3 查看刚刚创建的数据
6.4.5 创建用于 Django 的用户
6.4.5.1 创建用于 Django 到用户
6.4.5.2 刷新权限
6.5 退出 MariaDB 数据库
6.6 重启 MariaDB 数据库

步骤七:实现连接 MariaDB 数据库
7.1 安装 Django 连接 MariaDB 的模块
7.2 在 mysite 应用中添加 Django 连接 MariaDB 的模块
7.3 在 mysite 应用中设置连接到 MariaDB 数据库

步骤八:根据数据库表结构生成 Django 数据库模型

步骤九:实现展示功能
9.1 在 movies 应用中添加一个展示功能的 HTML 模板
9.2 在 movies 应用中添加一个网页返回值的模块并从数据库里读取全部数据
9.3 在 movies 应用中添加一个链接并设置对应的模块

步骤十:启动 Django 服务

步骤十一:测试展示功能

具体的操作步骤

步骤一:系统环境要求

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 此项目是一个 Python 包
4) mysite/settings.py 此 Django 项目的配置文件
5) mysite/urls.py 此 Django 项目的 URL 声明和 Django 的网站“目录”
6) mysite/wsgi.py WSGI 兼容 Web 服务器的入口

步骤四:创建 movies 应用
4.1 创建 movies 应用

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

4.2 movies 应用的目录
4.2.1 显示 movies 应用的目录

(django_env) [root@python mysite]# tree
.
├── manage.py
├── mysite
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── movies
    ├── __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 此项目是一个 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 应用的视图,接收前端数据,把数据传递给后端,响应相关页面

步骤五:实现 movies 应用的层级多链接
5.1 在 mysite 应用中添加一个链接并链接 movies 的链接

创建 mysite.movies.urls.py 并添加以下内容:

......
#coding=utf-8
from django.conf.urls import url, include
from users.views import register

urlpatterns = [
......
    url(r'^movies/', include('movies.urls')),
]

(补充:这里以设置 page 链接对应 movies 应用的链接为例)

5.2 在 mysite 应用中导入 movies 应用

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

INSTALLED_APPS = [
......
    'movies',
]

步骤六:实现连接 MariaDB 数据库
6.1 安装 MairaDB 数据库和客户端

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

6.2 安装 Django 连接 MariaDB 的模块

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

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

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

import pymysql
pymysql.install_as_MySQLdb()

6.4 创建用于 Django 的 MairaDB 的库、表、数据和用户并插入测试数据
6.4.1 进入 MairaDB 数据库

(django_env) [root@python mysite]# mysql -h 127.0.0.1 -p

6.4.2 创建用于 Django 的库

MariaDB [(none)]> create databases movies;

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

6.4.3 创建用于 Django 的表
6.4.3.1 进入用于 Django 到库

MariaDB [(none)]> use movies;

(补充:这里以进入 moives 库为例)

6.4.3.2 创建用于 Django 的表

MariaDB [movies]> create table movies(mid INT AUTO_INCREMENT,mname VARCHAR(100) NOT NULL,mdesc TEXT,mimg VARCHAR(120) NOT NULL,mlink VARCHAR(200) NOT NULL,PRIMARY KEY( mid ),UNIQUE( mname ));
Query OK, 0 rows affected (0.058 sec)


补充:这利以创建
1) mid 是 INT 字段,且自动增加
2) mname 是 VARCHAR 字段,长度为 100,且非空
3) mdesc 是 TEXT 字段,长度为 120,且非空
4) mlink 是 VARCHAR 字段,长度为 200,且非空
5) mid 为主键
6) mname 不能重复
为例

6.4.3.3 查看刚创建的表的表结构

MariaDB [movies]> desc movies; 
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| mid   | int(11)      | NO   | PRI | NULL    | auto_increment |
| mname | varchar(100) | NO   | UNI | NULL    |                |
| mdesc | text         | YES  |     | NULL    |                |
| mimg  | varchar(120) | NO   |     | NULL    |                |
| mlink | varchar(200) | NO   |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
5 rows in set (0.001 sec)

(补充:这里以查看 movies 表的表结构为例)

6.4.4 创建用于 Django 的数据
6.4.4.1 进入用于 Django 到库

MariaDB [(none)]> use movies;

(补充:这里以进入 moives 库为例)

6.4.4.2 创建用于 Django 的数据

MariaDB [movies]> insert into movies (mname,mdesc,mimg,mlink) VALUES("Titanic","Accidents and love story, UHD, Dolby Vision,Dolby Atmos","eternalcenter.com/titanic/image","eternalcenter.com/titanic");
Query OK, 1 row affected (0.008 sec)
MariaDB [movies]> 
MariaDB [movies]> insert into movies (mname,mdesc,mimg,mlink) VALUES("World War","Science fiction, UHD, Dolby Vision,Dolby Atmos","eternalcenter.com/world-war/image","eternalcenter.com/world-war");
Query OK, 1 row affected (0.008 sec)
MariaDB [movies]> 
MariaDB [movies]> insert into movies (mname,mdesc,mimg,mlink) VALUES("Maleficent","Magic, UHD, Dolby Vision,Dolby Atmos","eternalcenter.com/maleficent/image","eternalcenter.com/maleficent");
Query OK, 1 row affected (0.012 sec)
MariaDB [movies]> 
MariaDB [movies]> insert into movies (mname,mdesc,mimg,mlink) VALUES("Cars","Animation, UHD, Dolby Vision,Dolby Atmos","eternalcenter.com/cars/image","eternalcenter.com/cars");
Query OK, 1 row affected (0.011 sec)
MariaDB [movies]> 
MariaDB [movies]> insert into movies (mname,mdesc,mimg,mlink) VALUES("News","Animation, UHD, Dolby Vision,Dolby Atmos","eternalcenter.com/news/image","eternalcenter.com/news");
Query OK, 1 row affected (0.011 sec)

(补充:这里以符合 movies 表结构的规范,随意向 movies 插入 5 条数据为例)

6.4.4.3 查看刚刚创建的数据

MariaDB [movies]> select * from movies;
+-----+------------+---------------------------------------------------------+------------------------------------+------------------------------+
| mid | mname      | mdesc                                                   | mimg                               | mlink                        |
+-----+------------+---------------------------------------------------------+------------------------------------+------------------------------+
|   1 | Titanic    | Accidents and love story, UHD, Dolby Vision,Dolby Atmos | eternalcenter.com/titanic/image    | eternalcenter.com/titanic    |
|   3 | World War  | Science fiction, UHD, Dolby Vision,Dolby Atmos          | eternalcenter.com/world-war/image  | eternalcenter.com/world-war  |
|   4 | Maleficent | Magic, UHD, Dolby Vision,Dolby Atmos                    | eternalcenter.com/maleficent/image | eternalcenter.com/maleficent |
|   5 | Cars       | Animation, UHD, Dolby Vision,Dolby Atmos                | eternalcenter.com/cars/image       | eternalcenter.com/cars       |
|   6 | News       | Animation, UHD, Dolby Vision,Dolby Atmos                | eternalcenter.com/news/image       | eternalcenter.com/news       |
+-----+------------+---------------------------------------------------------+------------------------------------+------------------------------+
5 rows in set (0.000 sec)

(补充:这里以查看 movies 表里的所有数据为例)

6.4.5 创建用于 Django 的用户
6.4.5.1 创建用于 Django 到用户

MariaDB [(movies)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

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

6.4.5.2 刷新权限

MariaDB [(movies)]> flush privileges;

6.5 退出 MariaDB 数据库

MariaDB [(movies)]> exit

6.6 重启 MariaDB 数据库

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

步骤七:实现连接 MariaDB 数据库
7.1 安装 Django 连接 MariaDB 的模块

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

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

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

import pymysql
pymysql.install_as_MySQLdb()

7.3 在 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': 'movies',
        'HOST': '127.0.0.1’,
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': 'password',
    }
}
......


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

步骤八:根据数据库表结构生成 Django 数据库模型

(django_env) [root@python mysite]# python3 manage.py inspectdb>movies/models.py

步骤九:实现展示功能
9.1 在 movies 应用中添加一个展示功能的 HTML 模板

创建 mysite.movies.templates.movies.index.html 并添加以下内容:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
         /*avoid collapse after floating*/
        .clearfix{
                zoom:1;
        }
        .clearfix:after{
                content: "";display: block;visibility: hidden;line-height: 0;clear: both;
        }

        body,div{
            margin:0 auto;
        }

        div{
            border:1px solid gray;
            width:750px;
            text-align: center;
        }

        ul{
            list-style-type: none;
            display: inline-block;
        }

        #header li{
            float: left;
            margin-left:10px;
            font-size:16px;
            font-family: 'Microsoft elegant black';
            color: #666666;

        }
        #header li:hover{
            cursor: pointer;
            background:blue;
            color: white;
        }

        #content li{
            float: left;
            display: inline;
            margin-right:15px;
            text-align: center;
            height:225px;
            overflow: hidden;
            padding-top:10px;
            padding-bottom:5px;

        }
        #content h1{
            font-size:14px;
            margin:0;
        }

        .tip{
            display: block;
            font-size:12px;
        }

       .h1,.tip{
            width:110px;
           text-align: center;
        }
        
        #content ul{
            /*remove the inner and outer margins of UL*/
            margin:0;
            padding:0;

        }
    </style>

</head>
<body>
    <div id="header"  class="clearfix">
        <ul class="clearfix">
            <li>home page</li>
            <li>record</li>
            <li>love</li>
            <li>ethic</li>
            <li>comic</li>
            <li>science fiction</li>
            <li>history</li>
            <li>warfare</li>
            <li>short film</li>
            <li>natural</li>
        </ul>
    </div>
    <div id="content" >
        <ul class="clearfix">
            {% for movie in movies %}
                <li>
                    <a href="{{ movie.mlink }}"><img src="{{ movie.mimg }}"/></a>
                    <h1 class="h1">{{ movie.mname }}</h1>
                    <span class="tip">{{ movie.mdesc }}</span>
                </li>
            {% endfor %}
        </ul>
    </div>
</body>
</html>

(补充:这里主要以生成一个展示每条数据的 mlink 字段、mimg 字段、mname 字段 和 mdesc 字段的表格,且每条数据就是一个表格为例)

9.2 在 movies 应用中添加一个网页返回值的模块并从数据库里读取全部数据

在 mysite.movies.views.py 中添加以下内容:

......
from .models import Movies
......
def movies(request):
    movies = Movies.objects.all()
    return render(request,'movies/index.html',{'movies':movies})


补充:这里以:
1) 设置 movies 模块并返回 movies/index.html 为例
2) 这里的 movies = Movies.objects.all() 是指将 Movies 模块对应数据库里的所有数据导入给 movies 变量
3) 这里的 {‘movies’:movies} 是指给 movies/index.html 一个 movies 变量,并将现在的 movies 值赋予即将给予 movies/index.html 的 movies 变量
为例

9.3 在 movies 应用中添加一个链接并设置对应的模块

创建 mysite.movies.urls.py 并添加以下内容:

#coding=utf-8
from django.conf.urls import url
from movies.views import movies

urlpatterns = [
    url(r'^$', movies),
]

(补充:这里以设置空链接链接对应 movies 模块为例)

步骤十:启动 Django 服务

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

步骤十一:测试展示功能

1) 打开浏览器输入以下网址:

http://127.0.0.1:8000/movies/

2) 可以看到对应的展示模版

[内容] pip 工具的安装 (MacBook Air 版)

内容目录:

内容一:安装 pip2
1.1 下载 pip2
1.2 安装 pip2
1.3 删除 pip2
1.4 显示安装的 pip2
1.4.1 显示在 python 里有没有 pip 安装包
1.4.2 显示有没有 pip2 命令
1.4.3 升级 pip2

内容二:安装 pip3
2.1 准备安装 pip3 所需的环境
2.1.1 安装 python3
2.1.1.1 输入 python3 命令
2.1.1.2 在弹出的对话框里安装 python3
2.1.2 安装 xcode
2.1.2.1 输入 xcode-select –install 命令
2.1.2.2 在弹出的对话框里安装 xcode
2.2 安装 pip3
2.2.1 下载 pip3
2.2.2 安装 pip3
2.2.3 删除 pip3
2.2.4 显示安装的 pip3
2.2.4.1 显示在 python 里有没有 pip 安装包
2.2.4.2 显示有没有 pip3 命令
2.2.4.3 升级 pip3

具体的内容:

内容一:安装 pip2
1.1 下载 pip2

$ curl 'https://bootstrap.pypa.io/pip/2.7/get-pip.py' > get-pip.py

1.2 安装 pip2

$ sudo python get-pip.py

1.3 删除 pip2

$ rm get-pip.py

1.4 显示安装的 pip2
1.4.1 显示在 python 里有没有 pip 安装包

$ ls /Library/Python/2.7/site-packages/

(补充:这里以 Python 版本是 2.7 为例)

1.4.2 显示有没有 pip2 命令

$ which pip2

1.4.3 升级 pip2

$ sudo pip2 install --upgrade pip

内容二:安装 pip3
2.1 准备安装 pip3 所需的环境
2.1.1 安装 python3
2.1.1.1 输入 python3 命令

$ python3

2.1.1.2 在弹出的对话框里安装 python3

(步骤略)

2.1.2 安装 xcode
2.1.2.1 输入 xcode-select –install 命令

$ xcode-select --install

2.1.2.2 在弹出的对话框里安装 xcode

(步骤略)

2.2 安装 pip3
2.2.1 下载 pip3

$ curl 'https://bootstrap.pypa.io/pip/get-pip.py' > get-pip.py

2.2.2 安装 pip3

$ sudo python get-pip.py

2.2.3 删除 pip3

$ rm get-pip.py

2.2.4 显示安装的 pip3
2.2.4.1 显示在 python 里有没有 pip 安装包

$ ls /Library/Python/3.8/site-packages/

(补充:这里以 Python 版本是 3.8 为例)

2.2.4.2 显示有没有 pip3 命令

$ which pip3

2.2.4.3 升级 pip3

$ sudo pip3 install --upgrade pip

[实验] Django 登录功能的实现 (MariaDB 版)

注意:

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

正文:

步骤目录:

步骤一:系统环境要求

步骤二:安装 Django
2.1 安装 Python3
2.2 创建并进入 Django 项目的目录
2.3 将 Django 项目的目录指定为 Django 环境
2.4 进入 Django 环境

步骤三:创建 mysite 项目
3.1 创建 mysite 项目
3.2 mysite 项目的目录
3.2.1 安装 tree 目录显示软件
3.2.2 显示 mysite 项目的目录
3.3.3 Django 项目目录介绍

步骤四:创建 users 应用
4.1 创建 users 应用
4.2 users 应用的目录
4.2.1 显示 users 应用的目录
4.2.2 Django 应用目录介绍

步骤五:实现 users 应用的层级多链接
5.1 在 mysite 应用中添加一个链接并链接 users 的链接
5.2 在 mysite 应用中导入 users 应用

步骤六:实现连接 MariaDB 数据库
6.1 安装 MairaDB 数据库和客户端
6.2 安装 Django 连接 MariaDB 的模块
6.3 在 mysite 应用中添加 Django 连接 MariaDB 的模块
6.4 创建用于 Django 的 MairaDB 的库和用户
6.4.1 进入 MairaDB 数据库
6.4.2 创建用于 Django 的库
6.4.3 创建用于 Django 的用户
6.4.4 退出 MariaDB 数据库
6.4.5 重启 MariaDB
6.5 在 users 应用数据库模板中添加 user 类
6.6 在 mysite 应用中设置连接到 MariaDB 数据库
6.7 生成牵引文件
6.8 将牵引文件导入 MariaDB 数据库
6.9 查看导入到 MariaDB 数据库的表
6.9.1 进入 MariaDB 数据库
6.9.2 查看所有的库
6.9.3 进入 test 库
6.9.4 查看 test 库里所有的表
6.9.5 查看 users_user 表里的数据
6.9.6 查看 users_user 的表结构
6.9.7 退出 MariaDB 数据库

步骤七:实现注册功能
7.1 在 users 应用中添加一个注册功能的 HTML 模板
7.2 在 users 应用中添加一个网页返回值的模块并将符合的数值插入数据库
7.3 在 users 应用中添加一个链接并设置对应的模块

步骤八:实现展示功能
8.1 在 users 应用中添加一个展示数据功能的 html 模板
8.2 在 users 应用中添加一个网页返回值的模块并从数据库里读取全部数据
8.3 在 users 应用中添加一个链接并设置对应的模块

步骤九:实现登录功能
9.1 在 users 应用中添加一个登录功能的 html 模板
9.2 在 users 应用中添加一个网页返回值的模块并从数据库里比对数据
9.3 在 users 应用中添加一个链接并设置对应的模块

步骤十:启动 Django 服务

步骤十一:测试注册功能

步骤十二:测试展示功能

步骤十三:测试登录功能

具体的操作步骤:

步骤一:系统环境要求

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 此项目是一个 Python 包
4) mysite/settings.py 此 Django 项目的配置文件
5) mysite/urls.py 此 Django 项目的 URL 声明和 Django 的网站“目录”
6) mysite/wsgi.py WSGI 兼容 Web 服务器的入口

步骤四:创建 users 应用
4.1 创建 users 应用

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

4.2 users 应用的目录
4.2.1 显示 users 应用的目录

(django_env) [root@python mysite]# tree
.
├── manage.py
├── mysite
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── users
    ├── __init__.py
    ├── admin.py
    ├── apps.py
    ├── migrations
    │   └── __init__.py
    ├── models.py
    ├── tests.py
    └── views.py

3 directories, 13 files

4.2.2 Django 应用目录介绍

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

步骤五:实现 users 应用的层级多链接
5.1 在 mysite 应用中添加一个链接并链接 users 的链接

创建 mysite/users/urls.py 并添加以下内容:

#coding=utf-8
from django.conf.urls import url, include
from users.views import register

urlpatterns = [
    url(r'^users/', include('users.urls')),
]

5.2 在 mysite 应用中导入 users 应用

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

......
INSTALLED_APPS = [
......
    'users',
]
......

步骤六:实现连接 MariaDB 数据库
6.1 安装 MairaDB 数据库和客户端

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

6.2 安装 Django 连接 MariaDB 的模块

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

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

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

import pymysql
pymysql.install_as_MySQLdb()

6.4 创建用于 Django 的 MairaDB 的库和用户
6.4.1 进入 MairaDB 数据库

(django_env) [root@python mysite]# mysql -h 127.0.0.1 -p

6.4.2 创建用于 Django 的库

MariaDB [(none)]> create database test;

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

6.4.3 创建用于 Django 的用户

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

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

6.4.4 退出 MariaDB 数据库

MariaDB [(none)]> exit

6.4.5 重启 MariaDB

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

6.5 在 users 应用数据库模板中添加 user 类

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

......
class user(models.Model):
    tname = models.CharField(max_length=30,unique=True)
    tpassword = models.CharField(max_length=30)


补充:
1) 这里以创建 tname 和 tpassword 两个字符,长度为 30 个字节,其中一个为唯一为例
2) 主键可以不用设置,默认会自动生成一个 ID 主键
3) 默认表名会生成 <应用名>_<模型类名>,在这里就是 users_user
4) 指定要生成的表明的设置方法是:

    class Meta:
        db_table = '<table>'

6.6 在 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': 'test',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': 'password',
    }
}
......


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

6.7 生成牵引文件

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

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

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

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

6.9 查看导入到 MariaDB 数据库的表
6.9.1 进入 MariaDB 数据库

# mysql -uroot -h172.16.0.7 -p

6.9.2 查看所有的库

> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+

6.9.3 进入 test 库

> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

6.9.4 查看 test 库里所有的表

> 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             |
| users_user                 |
+----------------------------+
11 rows in set (0.001 sec)

6.9.5 查看 users_user 表里的数据

> select * from users_user;
Empty set (0.001 sec)

6.9.6 查看 users_user 的表结构

> desc users_user;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| id        | bigint(20)  | NO   | PRI | NULL    | auto_increment |
| tname     | varchar(30) | NO   | UNI | NULL    |                |
| tpassword | varchar(30) | NO   |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+
3 rows in set (0.003 sec)

6.9.7 退出 MariaDB 数据库

> quit;

步骤七:实现注册功能
7.1 在 users 应用中添加一个注册功能的 HTML 模板

创建 mysite/users/templates/users/register.html 并添加以下内容:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>register</title>
</head>
<body>
    <form action="/users/register/" method="post">
        {% csrf_token %}
        <p>
            <label for="un">User: </label><input type="text" name="uname" id="un"/>
        </p>
        <p>
            <label for="up">Password: </label><input type="password" name="upassword" id="up"/>
        </p>
        <input type="submit" value="register"/>
    </form>
</body>
</html>


补充:这里以
1) 生成一个用户名输入栏,赋值给 uname
2) 生成一个密码输入栏,赋值给 upassword
3) 生成一个 register 提交按钮
为例

7.2 在 users 应用中添加一个网页返回值的模块并将符合的数值插入数据库

将 mysite/users/views.py 里的内容全部修改如下:

from django.shortcuts import render
from django.shortcuts import HttpResponse
from .models import user

# Create your views here.

def register(request):
    if request.method=="GET":
        return render(request,'users/register.html')
    else:
        uname = request.POST.get('uname','')
        upassword = request.POST.get('upassword','')

        if uname.strip()!='' and upassword.strip()!='':
        # determine whether uname and upassword are null values
            nuser = user(tname=uname,tpassword=upassword)

            nuser.save()
            return HttpResponse('success!')
        else:
            return HttpResponse('fail')

    return HttpResponse('fail')


补充:这里以
1) 设置 register 模块并返回 users/register.html
2) 设置 register 模块当网页返回模式是 POST 且 uname 和 upassword 都为非空时将数据存入数据库
为例

7.3 在 users 应用中添加一个链接并设置对应的模块

创建 mysite/users/urls.py 并添加以下内容:

#coding=utf-8
from django.conf.urls import url
from users.views import register

urlpatterns = [
    url(r'^register', register),
]

(补充:这里以设置 register 链接对应 register 模块为例)

步骤八:实现展示功能
8.1 在 users 应用中添加一个展示数据功能的 html 模板

创建 mysite/users/templates/users/show.html 并添加以下内容:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>show</title>
</head>
<body>
    <table border="1" cellspacing="0" width="500px">
        <tr>
            <th>Num</th>
            <th>ID</th>
            <th>Name</th>
            <th>Password</th>
        </tr>
        {% for oneuser in userlist %}
            <tr>
                <td>{{ forloop.counter }}</td>
                <td>{{ oneuser.id }}</td>
                <td>{{ oneuser.tname }}</td>
                <td>{{ oneuser.tpassword }}</td>
            </tr>
        {% endfor %}
    </table>    
</body>
</html>


补充:
1) 这里以生成一个表格,并将数据循环写入进去为例
2) 这里的 {% for oneuser in userlist %}……{% endfor %} 是指以 userlist 变量里的数据进行循环
3) 这里的 forloop.counter 变量在这里的作用是正向计数,也可以使用revcounter0 进行逆向计数

8.2 在 users 应用中添加一个网页返回值的模块并从数据库里读取全部数据

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

......
def show(request):
    ruser = user.objects.all()

    return render(request,'users/show.html',{'userlist':ruser})


补充:这里以
1) 设置 ruser 模块并返回 users/show.html
2) 这里的 ruser = user.objects.all() 是指将 user 模块对应数据库里的所有数据导入给 ruser 变量
3) 这里的 {‘userlist’:ruser} 是指给 users/show.html 一个 user list 变量,并将现在的 ruser 值赋予即将给予 users/show.html 的 ruser 变量
为例

8.3 在 users 应用中添加一个链接并设置对应的模块

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

......
from users.views import show

urlpatterns = [
......
    url(r'^show', show),
]

(补充:这里以设置 show 链接对应 show 模块为例)

步骤九:实现登录功能
9.1 在 users 应用中添加一个登录功能的 html 模板

创建 mysite/users/templates/users/login.html 并添加以下内容:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>register</title>
</head>
<body>
    <form action="/users/login/" method="post">
        {% csrf_token %}
        <p>
            <label for="un">User: </label><input type="text" name="uname" id="un"/>
        </p>
        <p>
            <label for="up">Password: </label><input type="password" name="upassword" id="up"/>
        </p>
        <input type="submit" value="login"/>
    </form>
</body>
</html>


补充:这里以
1) 生成一个用户名输入栏,赋值给 uname
2) 生成一个密码输入栏,赋值给 upassword
3) 生成一个 login 提交按钮
为例

9.2 在 users 应用中添加一个网页返回值的模块并从数据库里比对数据

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

......
def login(request):
    if request.method=='GET':
        return render(request,'users/login.html')
    else:
        loginname = request.POST.get('uname')
        loginpassword = request.POST.get('upassword')

        if loginname and loginpassword:
            c = user.objects.filter(tname=loginname,tpassword=loginpassword).count()
            if c == 1:
                return HttpResponse('Login Success !')
    return HttpResponse('Login Fail !')


补充:这里以
1) 设置 login 模块并返回 users/login.html
2) 从 users/register.html 中获取 uname 和 upassword 值
3) 设置 login 模块当网页返回模式是 POST 且 uname 和 upassword 与数据库中对应的值一样时则返回 ‘Login Success !’ 值,否则返回 ‘Login Fail !’ 值
为例
4) 这里 c = user.objects.filter(tname=loginname,tpassword=loginpassword).count() 中逗号 “,” 是 and 的意思

9.3 在 users 应用中添加一个链接并设置对应的模块

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

......
from users.views import login

urlpatterns = [
......
    url(r'^login/$', login),
]

(补充:这里以设置 login 链接对应 login 模块为例)

步骤十:启动 Django 服务

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

步骤十一:测试注册功能

1) 打开浏览器输入以下网址:

http://127.0.0.1:8000/users/register/

2) 当用户名输入 eternalcenter,密码输入密码 1 点击 “register” 时,返回 successful

步骤十二:测试展示功能

1) 打开浏览器输入以下网址:

http://127.0.0.1:8000/users/show/

2) 可以看到以下信息:

1 eternalcenter 1

步骤十三:测试登录功能

1) 打开浏览器输入以下网址:

http://127.0.0.1:8000/users/login/

2) 当用户名输入 eternalcenter,密码输入密码 1 点击 “login” 时,返回 Login Success !

[实验] Django 展示功能的实现 (SQLite 版)

注意:

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

正文:

步骤目录:

步骤一:系统环境要求

步骤二:安装 Django
2.1 安装 Python3
2.2 创建并进入 Django 项目的目录
2.3 将 Django 项目的目录指定为 Django 环境
2.4 进入 Django 环境

步骤三:创建 mysite 项目
3.1 创建 mysite 项目
3.2 mysite 项目的目录
3.2.1 安装 tree 目录显示软件
3.2.2 显示 mysite 项目的目录
3.3.3 Django 项目目录介绍

步骤四:创建 users 应用
4.1 创建 users 应用
4.2 users 应用的目录
4.2.1 显示 users 应用的目录
4.2.2 Django 应用目录介绍

步骤五:实现 users 应用的层级多链接
5.1 在 mysite 应用中添加一个链接并链接 users 的链接
5.2 在 mysite 应用中导入 users 应用

步骤六:实现连接 SQLite 数据库
6.1 在 users 应用数据库模板中添加 user 类
6.2 将 Django 的模板导入 SQLite 数据库
6.2.1 生成牵引文件
6.2.2 将牵引文件导入 SQLite 数据库

步骤七:实现注册功能
7.1 在 users 应用中添加一个注册功能的 HTML 模板
7.2 在 users 应用中添加一个网页返回值的模块并将符合的数值插入数据库
7.3 在 users 应用中添加一个链接并设置对应的模块

步骤八:实现展示功能
8.1 在 users 应用中添加一个展示数据功能的 HTML 模板
8.2 在 users 应用中添加一个网页返回值的模块并从数据库里读取全部数据
8.3 在 users 应用中添加一个链接并设置对应的模块

步骤九:启动 Django 服务

步骤十:测试注册功能

步骤十一:测试展示功能

具体的操作步骤:

步骤一:系统环境要求

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 此项目是一个 Python 包
4) mysite/settings.py 此 Django 项目的配置文件
5) mysite/urls.py 此 Django 项目的 URL 声明和 Django 的网站“目录”
6) mysite/wsgi.py WSGI 兼容 Web 服务器的入口

步骤四:创建 users 应用
4.1 创建 users 应用

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

4.2 users 应用的目录
4.2.1 显示 users 应用的目录

(django_env) [root@python mysite]# tree
.
├── manage.py
├── mysite
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── users
    ├── __init__.py
    ├── admin.py
    ├── apps.py
    ├── migrations
    │   └── __init__.py
    ├── models.py
    ├── tests.py
    └── views.py

3 directories, 13 files

4.2.2 Django 应用目录介绍

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

步骤五:实现 users 应用的层级多链接
5.1 在 mysite 应用中添加一个链接并链接 users 应用的链接

创建 mysite/users/urls.py 并添加以下内容:

#coding=utf-8
from django.conf.urls import url, include
from users.views import register

urlpatterns = [
    url(r'^users/', include('users.urls')),
]

5.2 在 mysite 应用中导入 users 应用

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

......
INSTALLED_APPS = [
......
    'users',
]
......

步骤六:实现连接 SQLite 数据库
6.1 在 users 应用数据库模板中添加 user 类

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

......
class user(models.Model):
    tname = models.CharField(max_length=30,unique=True)
    tpassword = models.CharField(max_length=30)


补充:
1) 这里以创建 tname 和 tpassword 两个字符,长度为 30 个字节,其中一个为唯一为例
2) 主键可以不用设置,默认会自动生成一个 ID 主键
3) 默认表名会生成 <应用名>_<模型类名>,在这里就是 users_user
4) 指定要生成的表明的设置方法是:

    class Meta:
        db_table = '<表名>'

6.2 将 Django 的模板导入 SQLite 数据库
6.2.1 生成牵引文件

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

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

6.2.2 将牵引文件导入 SQLite 数据库

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

步骤七:实现注册功能
7.1 在 users 应用中添加一个注册功能的 HTML 模板

创建 mysite/users/templates/users/register.html 并添加以下内容:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>register</title>
</head>
<body>
    <form action="/users/register/" method="post">
        {% csrf_token %}
        <p>
            <label for="un">User: </label><input type="text" name="uname" id="un"/>
        </p>
        <p>
            <label for="up">Password: </label><input type="password" name="upassword" id="up"/>
        </p>
        <input type="submit" value="register"/>
    </form>
</body>
</html>


补充:这里以
1) 生成一个用户名输入栏,赋值给 uname
2) 生成一个密码输入栏,赋值给 upassword
3) 生成一个 register 提交按钮
为例

7.2 在 users 应用中添加一个网页返回值的模块并将符合的数值插入数据库

将 mysite/users/views.py 里的内容全部修改如下:

from django.shortcuts import render
from django.shortcuts import HttpResponse
from .models import user

# Create your views here.

def register(request):
    if request.method=="GET":
        return render(request,'users/register.html')
    else:
        uname = request.POST.get('uname','')
        upassword = request.POST.get('upassword','')

        if uname.strip()!='' and upassword.strip()!='':
        # confirm whether uname and upassword are null
            nuser = user(tname=uname,tpassword=upassword)

            nuser.save()
            return HttpResponse('success!')
        else:
            return HttpResponse('fail')

    return HttpResponse('fail')


补充:这里以
1) 设置 register 模块并返回 users/register.html
2) 从 users/register.html 中获取 uname 和 upassword 值
3) 设置 register 模块当网页返回模式是 POST 且 uname 和 upassword 都为非空时将数据存入数据库
为例

7.3 在 users 应用中添加一个链接并设置对应的模块

创建 mysite/users/urls.py 并添加以下内容:

#coding=utf-8
from django.conf.urls import url
from users.views import register

urlpatterns = [
    url(r'^register', register),
]

(补充:这里以设置 register 链接对应 register 模块为例)

步骤八:实现展示功能
8.1 在 users 应用中添加一个展示数据功能的 HTML 模板

创建 mysite/users/templates/users/show.html 并添加以下内容:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>show</title>
</head>
<body>
    <table border="1" cellspacing="0" width="500px">
        <tr>
            <th>Num</th>
            <th>ID</th>
            <th>Name</th>
            <th>Password</th>
        </tr>
        {% for oneuser in userlist %}
            <tr>
                <td>{{ forloop.counter }}</td>
                <td>{{ oneuser.id }}</td>
                <td>{{ oneuser.tname }}</td>
                <td>{{ oneuser.tpassword }}</td>
            </tr>
        {% endfor %}
    </table>    
</body>
</html>


补充:
1) 这里以生成一个表格,并将数据循环写入进去为例
2) 这里的 {% for oneuser in userlist %}……{% endfor %} 是指以 userlist 变量里的数据进行循环
3) 这里的 forloop.counter 变量在这里的作用是正向计数,也可以使用revcounter0 进行逆向计数

8.2 在 users 应用中添加一个网页返回值的模块并从数据库里读取全部数据

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

......
def show(request):
    ruser = user.objects.all()

    return render(request,'users/show.html',{'userlist':ruser})


补充:这里以
1) 设置 show 模块并返回 users/show.html
2) 这里的 ruser = user.objects.all() 是指在将所有数据导入给 ruser 变量
3) 这里的 {‘userlist’:ruser} 是指给 users/show.html 一个 userlist 变量,并将现在的 ruser 值赋予即将给予 users/show.html 的 userlist 变量
为例

8.3 在 users 应用中添加一个链接并设置对应的模块

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

......
from users.views import show

urlpatterns = [
......
    url(r'^show', show),
]

(补充:这里以设置 show 链接对应 show 模块为例)

步骤九:启动 Django 服务

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

步骤十:测试注册功能

1) 打开浏览器输入以下网址:

http://127.0.0.1:8000/users/register/

2) 当用户名输入 eternalcenter,密码输入密码 1 点击 “register” 时,返回 successful

步骤十一:测试展示功能

1) 打开浏览器输入以下网址:

http://127.0.0.1:8000/users/show/

2) 可以看到以下信息:

1 eternalcenter 1

[内容] Django MVT 模式简介

内容一:Django MVT 模式的视图

         URL Dispatcher

Browser                  Views Models database

         Cache Templates

内容二:Django MVT 模式简介
2.1 访问页面

Browser –> URL Dispatcher –> Views Models –> Database

2.2 应答页面

Database –> Views Models –> URL Dispatcher –> Browser