Python 框架 之 Django 绑定 MySql ,MVT 实现简单一个简单的浏览器(内附详细步骤)

 

 

Python 框架 之 Django 绑定 MySql ,MVT 实现简单一个简单的浏览器(内附详细步骤)

 

目录

Python 框架 之 Django 绑定 MySql ,MVT 实现简单一个简单的浏览器(内附详细步骤)

一、简单介绍

二、实现原理

三、注意实现

四、效果预览

五、MySql 数据库的配置到 django 框架 M 中

六、构建模型类,使用命令创建表,并添加数据

七、创建视图,添加模板 template html,指定 urls 格式路径,实现网页浏览

八、关键代码


 

一、简单介绍

Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言,可以应用于以下领域: Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。

本节介绍,把MySQL作为 数据库,实现简单 Django 的网页示例。

环境:python 3.8,django 3.0.3,windows 10,pymysql 0.9.3

 

涉及到的命令:

net start mysql 		启动 MySQL 服务
mysql -u账户名 -p密码		输入账户,密码登陆
show databases 			查看数据库
create database 库名 		新建一个给 django 使用的数据库
show global variables like 'port'	查询端数据库口号
workon 虚拟环境名			进入虚拟环境
django-admin startproject 项目名 	开始一个django 项目
python manage.py startapp 应用名 	开始一个应用
python manage.py runserver 		启动服务
python -m pip install --upgrade pip 	进行升级 pip
python manage.py makemigrations 	迁移创建数据模型
python manage.py migrate 		在数据库创建对应表
use 对应库名 				使用该库
show tables 				查看该库是否有这两张表
desc 表名 				查看表结构
insert into 表名(表列名) values (对应数据),(对应数据) 	插入数据到表中
select * from 表名					查看表的所有内容

 

二、实现原理

1、在 settings.py 中添加应用和绑定 mysql 数据库信息,以及 templates 路径

2、在 views.py 中代码实现返回的 html 数据和页面

3、在templates 文件夹下构建对应的 html ,实现对应的页面代码

4、在 urls.py 配置对应的 html 格式路径

 

三、注意实现

1、注意MySQL数据库命令后面添加分号(;)

2、必要的时候,数据库创建的时候指定字符集 charset=utf8

3、pycharm 中编辑 django 脚本,建议打开项目是虚拟环境目录文件夹作为打开文件夹,不然工程中可能识别不到 虚拟环境的对应库包文件(如果有更好的办法可忽略,或告知)

4、启动服务,数据中版本 可能会报错 mysqlclient 1.3.13 or newer is required ,可以带对应代码注释掉即可

5、在 views.py 中引入对应的 model的时候,请使用应用名.models 的形式,例如 from mybook.models import BookInfo,不然可能会报错

 

四、效果预览

 

五、MySql 数据库的配置到 django 框架 M 中

常用开发工具 之 MySql 数据库的下载与安装(如果没有配置安装MySQL的话)

1、cmd使用 net start mysql ,启动 MySQL 服务,并输入账户,密码登陆,命令 mysql -u账户名 -p密码

 

2、show databases 查看数据库,create database 库名 新建一个给 django 使用的数据库

(注意:如果数据库需要用到中文,建议使用 create database 库名 charset=utf8)

 

3、后面会用到数据库的端口号,可以使用下面的命令查询端口号,show global variables like 'port'

 

4、另起一个cmd 窗口, workon 虚拟环境名,进入虚拟环境,然后盘冒号(例如 d: )能快速进入虚拟环境的绝对路径,然后为了方便管理工程项目,(新建后)进入工程目录, django-admin startproject 项目名,开始一个django 项目,cd 项目名 进入项目 ,使用 python manage.py startapp 应用名,开始一个应用

 

5、 pycharm 进入django 项目所在的 虚拟环境

 

6、在项目中的 settings.py 中 INSTALLED_APPS 添加注意应用名,如下图

 

7、在项目中的 settings.py 中 DATABASES 中配置 MySQL 数据库信息

 

8、cmd 中 python manage.py runserver 尝试启动服务,然后会报错,python 没有 MySQL 模块

 

9、使用 pip install pymysql 安装 pymysql

(可能会让升级 pip ,可以使用命令 python -m pip install --upgrade pip 进行升级 pip)

 

10、在项目工程中,__init__.py 添加 代码 pymysql.install_as_MySQLdb()

 

11、cmd 中 python manage.py runserver 尝试启动服务,可能会报错 mysqlclient 1.3.13 or newer is required

 

12、找到虚拟环境下的 Lib\site-packages\django\db\backends\mysql\base.py 脚本,并打开,注释掉版本检查(win django 高版本好似只能支持到 pymysql 0.9.3)

 

13、cmd 中 python manage.py runserver 尝试启动服务,即可启动正常了

 

六、构建模型类,使用命令创建表,并添加数据

1、在 pycharm 中编辑 models.py ,添加两个数据模型 BookInfo 和 HeroInfo

from django.db import models

# Create your models here.
# 一类
class BookInfo(models.Model):
    '''图书模型类'''
    # 书的名称
    btitle = models.CharField(max_length=20)
    # 出版日期
    bpub_date = models.DateField()
    # 阅读量 默认为0
    bread = models.IntegerField(default=0)
    # 评论量 默认为0
    bcomment = models.IntegerField(default=0)
    # 软删除标志 默认不删除
    isDelete = models.BooleanField(default=False)

# 多类
class HeroInfo(models.Model):
    '''英雄任务模型类'''
    # 英雄名称
    hname= models.CharField(max_length=20)
    # 性别 默认False 为男
    hgender = models.BooleanField(default=False)
    # 备注
    hcomment = models.CharField(max_length=200)
    # 关系属性(关联的外键表)
    hbook = models.ForeignKey('BookInfo', on_delete=models.CASCADE)
    # 软删除标志 默认不删除
    isDelete = models.BooleanField(default=False)

 

2、在cmd 中使用命令 python manage.py makemigrations 迁移创建数据模型,同时migrations 会生成对应文件,结果如下图

 

3、在cmd 中使用 python manage.py migrate 在数据库创建这两张表

 

4、登录 mysql ,可以查询是否构建成功

 

5、show databases 查看数据库,use 对应库名 使用该库

 

6、show tables 查看该库是否有这两张表

 

7、desc 表名 查看表结构

 

8、快速插入一些数据,方便后面查询数据库展示(当然也可以在后台添加),如下图

insert into mybook_bookinfo(btitle,bpub_date,bread,bcomment,isDelete) values
('射雕英雄传','1980-5-1',12,34,0),
('天龙八部','1986-7-24',36,40,0),
('雪山飞狐','1987-11-11',12,324,0),
('笑傲江湖','1995-8-12',23,44,0);

insert into mybook_heroinfo(hname,hgender,hbook_id,hcomment,isDelete) values
('郭靖',1,1,'降龙十八掌',0),
('黄蓉',0,1,'打狗棍法',0),
('乔峰',1,2,'降龙十八掌',0),
('虚竹',1,2,'天山六阳指',0),
('东方不败',0,4,'葵花宝典',0),
('令狐冲',1,4,'独孤九剑',0);

 

七、创建视图,添加模板 template html,指定 urls 格式路径,实现网页浏览

1、在 项目中添加一个文件夹 templates 用来保存 html 模板

 

 

2、在 settings.py 中 TEMPLATES 中添加 html 模板文件目录

 

3、在 templates 文件夹下再添加一个对应应用的文件夹(方便管理)然后添加一个 html 文件,大致代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>图书信息</title>
</head>
<body>
<a href="/create">新增</a>
<ul>
    {% for book in books %}
        <li> {{ book.btitle }} -- <a href="/delete{{book.id}}">删除</a> </li>
    {% endfor %}
</ul>
</body>
</html>

 

4、在应用 views.py 添加对应的视图代码,控制返回对应的 html 页面给浏览器渲染

(注意:这里 BookInfo 看似报错,其实没有(若不这样写,否则后面会运行服务失败))

from datetime import date

from django.http import HttpResponse,HttpResponseRedirect
from django.shortcuts import render, redirect

# Create your views here.
from mybook.models import BookInfo
# from DjangoProjects.mysqlbook.mybook.models import BookInfo


def index(request):
    '''显示图书信息'''
    # 1、查询出所有图书的信息
    books = BookInfo.objects.all()
    # 使用模板
    return render(request, r'mybook/index.html', {'books': books})

def create(resquest):
    '''新增图书'''
    # 创建BookInfo 对象
    b = BookInfo()
    b.btitle = '鹿鼎记'
    b.bpub_date = date(1992, 2, 3)
    # 保存
    b.save()
    # 返回
    # return HttpResponse('ok')
    # 重定向返回 /index 页面
    return HttpResponseRedirect('/index')

def delete(request, bid):
    '''删除图书'''
    # 通过bid,获得删除的图书
    book = BookInfo.objects.get(id=bid)
    # 删除
    book.delete()
    # 重定向返回页面
    return redirect('/index')

 

5、在项目中 urls.py 中添加如下代码

"""mysqlbook URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/3.0/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include
from django.conf.urls import url

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^', include('mybook.urls')),   # 包含 mybook 应用的 urls 文件

]

 

6、在应用中添加脚本 urls.py ,并添加对应解析的格式,如下


from django.conf.urls import url
from DjangoProjects.mysqlbook.mybook import views

urlpatterns = [
    url(r'^index$', views.index),       # 图书信息也页面
    url(r'^create$', views.create),     # 创建图书
    url(r'^delete(\d+)$', views.delete) # 删除指定图书
]

 

7、在 cmd 中,输入 python manage.py runserver,运行服务(前提数据库服务也要打开哦,打开就忽略)

 

8、在浏览器输入网址 http://127.0.0.1:8000/index,这要就可以简单的新增删除数据了(对应数据库的数据也会删除新增)

 

八、关键代码

1、models.py

from django.db import models

# Create your models here.
# 一类
class BookInfo(models.Model):
    '''图书模型类'''
    # 书的名称
    btitle = models.CharField(max_length=20)
    # 出版日期
    bpub_date = models.DateField()
    # 阅读量 默认为0
    bread = models.IntegerField(default=0)
    # 评论量 默认为0
    bcomment = models.IntegerField(default=0)
    # 软删除标志 默认不删除
    isDelete = models.BooleanField(default=False)

# 多类
class HeroInfo(models.Model):
    '''英雄任务模型类'''
    # 英雄名称
    hname= models.CharField(max_length=20)
    # 性别 默认False 为男
    hgender = models.BooleanField(default=False)
    # 备注
    hcomment = models.CharField(max_length=200)
    # 关系属性(关联的外键表)
    hbook = models.ForeignKey('BookInfo', on_delete=models.CASCADE)
    # 软删除标志 默认不删除
    isDelete = models.BooleanField(default=False)

 

2、data.txt

insert into mybook_bookinfo(btitle,bpub_date,bread,bcomment,isDelete) values
('射雕英雄传','1980-5-1',12,34,0),
('天龙八部','1986-7-24',36,40,0),
('雪山飞狐','1987-11-11',12,324,0),
('笑傲江湖','1995-8-12',23,44,0);

insert into mybook_heroinfo(hname,hgender,hbook_id,hcomment,isDelete) values
('郭靖',1,1,'降龙十八掌',0),
('黄蓉',0,1,'打狗棍法',0),
('乔峰',1,2,'降龙十八掌',0),
('虚竹',1,2,'天山六阳指',0),
('东方不败',0,4,'葵花宝典',0),
('令狐冲',1,4,'独孤九剑',0);

 

3、index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>图书信息</title>
</head>
<body>
<a href="/create">新增</a>
<ul>
    {% for book in books %}
        <li> {{ book.btitle }} -- <a href="/delete{{book.id}}">删除</a> </li>
    {% endfor %}
</ul>
</body>
</html>

 

4、views.py

from datetime import date

from django.http import HttpResponse,HttpResponseRedirect
from django.shortcuts import render, redirect

# Create your views here.
from mybook.models import BookInfo
# from DjangoProjects.mysqlbook.mybook.models import BookInfo


def index(request):
    '''显示图书信息'''
    # 1、查询出所有图书的信息
    books = BookInfo.objects.all()
    # 使用模板
    return render(request, r'mybook/index.html', {'books': books})

def create(resquest):
    '''新增图书'''
    # 创建BookInfo 对象
    b = BookInfo()
    b.btitle = '鹿鼎记'
    b.bpub_date = date(1992, 2, 3)
    # 保存
    b.save()
    # 返回
    # return HttpResponse('ok')
    # 重定向返回 /index 页面
    return HttpResponseRedirect('/index')

def delete(request, bid):
    '''删除图书'''
    # 通过bid,获得删除的图书
    book = BookInfo.objects.get(id=bid)
    # 删除
    book.delete()
    # 重定向返回页面
    return redirect('/index')

 

5、mysqlbook 目录下的 urls.py

"""mysqlbook URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/3.0/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include
from django.conf.urls import url

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^', include('mybook.urls')),   # 包含 mybook 应用的 urls 文件

]

 

6、mybook 目录下的 urls.py


from django.conf.urls import url
from DjangoProjects.mysqlbook.mybook import views

urlpatterns = [
    url(r'^index$', views.index),       # 图书信息也页面
    url(r'^create$', views.create),     # 创建图书
    url(r'^delete(\d+)$', views.delete) # 删除指定图书
]

 

 

 

猜你喜欢

转载自blog.csdn.net/u014361280/article/details/107295199