Django使用mysql操作实战系列之七
来源:互联网 发布:卡二的网络不好 编辑:程序博客网 时间:2024/06/01 09:19
1,创建项目test03
进入虚拟环境py3_space01。
workon py3_space01
创建项目test03。
django-admin startproject test03
打开test03/settings.py文件,找到DATABASES项,默认使用SQLite3数据库
2,mysql数据库创建及配置
修改为使用MySQL数据库,代码如下:
将引擎改为mysql,提供连接的主机HOST、端口PORT、数据库名NAME、用户名USER、密码PASSWORD。
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'test03', #数据库名字, 'USER': 'root', #数据库登录用户名 'PASSWORD': 'xiaoke', #数据库登录密码,我自己修改了 'HOST': 'localhost', #数据库所在主机(公司中写真实主机地址) 'PORT': '3306', #数据库端口 }}
注意:数据库test2 Django框架不会自动生成,需要我们自己进入mysql数据库去创建。
下面是手动创建数据库,打开新终端,在命令行登录mysql,创建数据库test2。
注意:设置字符集为utf8
create database test2 charset=utf8;
3,创建booktest应用
进入test03目录,创建应用booktest
cd test03
python manage.py startapp booktest
4,注册booktest应用
将应用booktest注册到项目中:打开test03/settings.py文件,找到INSTALLED_APPS项,加入如下代码:
5,定义模型类
- 模型类被定义在“应用/models.py”文件中,此例中为“booktest/models.py”文件。
- 模型类必须继承自Model类,位于包django.db.models中。
- 对于重要数据使用逻辑删除。
6,具体模型代码
# 定义图书模型类BookInfoclass BookInfo(models.Model): # 图书名称,唯一 btitle = models.CharField(max_length=50, unique=True) bpub_date = models.DateField() bread = models.IntegerField(default=0) bcomment = models.IntegerField(default=0) # 逻辑删除,默认不删除 idDelete = models.BooleanField(default=False)# 定义英雄模型类HeroInfoclass HeroInfo(models.Model): # 英雄姓名,不唯一,可以有重名的英雄 hname=models.CharField(max_length=50,unique=False) # 英雄性别,默认False为男性,也可以设为Integer类型,0或者1 hgender=models.BooleanField(default=False) isDelete=models.BooleanField(default=False) # 英雄的描述 hcontent=models.CharField(max_length=500) # 图书与英雄的关系为一对多的关系,所以属性定义在英雄的模型类中 hbook=models.ForeignKey('BookInfo')
7,迁移
生成迁移文件。
python manage.py makemigrations
执行迁移。
python manage.py migrate
打开数据库的命令行,查看当前所有表如下图:
表booktest_bookinfo结构如:
默认值并不在数据库层面生效,而是在django创建对象时生效。
表booktest_heroinfo结构如下:
Django框架会根据关系属性生成一个关系字段,并创建外键约束。
8,建立测试数据
- 在数据库命令行中,复制如下语句执行,向booktest_bookinfo表中插入测试数据:
insert into booktest_bookinfo(btitle,bpub_date,bread,bcomment,isDelete) values('射雕英雄传','1980-5-1',12,34,0),('天龙八部','1986-7-24',36,40,0),('笑傲江湖','1995-12-24',20,80,0),('雪山飞狐','1987-11-11',58,24,0);
- 再复制如下语句执行,向booktest_heroinfo表中插入测试数据:
insert into booktest_heroinfo(hname,hgender,hbook_id,hcontent,isDelete) values('郭靖',1,1,'降龙十八掌',0),('黄蓉',0,1,'打狗棍法',0),('黄药师',1,1,'弹指神通',0),('欧阳锋',1,1,'蛤蟆功',0),('梅超风',0,1,'九阴白骨爪',0),('乔峰',1,2,'降龙十八掌',0),('段誉',1,2,'六脉神剑',0),('虚竹',1,2,'天山六阳掌',0),('王语嫣',0,2,'神仙姐姐',0),('令狐冲',1,3,'独孤九剑',0),('任盈盈',0,3,'弹琴',0),('岳不群',1,3,'华山剑法',0),('东方不败',0,3,'葵花宝典',0),('胡斐',1,4,'胡家刀法',0),('苗若兰',0,4,'黄衣',0),('程灵素',0,4,'医术',0),('袁紫衣',0,4,'六合拳',0);
9,定义视图
- 打开booktest/views.py文件,定义视图代码如下:
from datetime import datefrom django.shortcuts import render,redirectfrom booktest.models import BookInfo# 查询所有图书并显示的视图函数def index(request): books=BookInfo.objects.all() return render(request,'booktest/index.html',{'books':books})# 新增图书视图视图函数def addBook(request): book=BookInfo() book.btitle='晓可自传' book.bpub_date=date(2017,6,27) book.save() # return HttpResponse('ok') # 重定向跳转到首页 return redirect('/index/')# 根据图书id删除一本书的视图函数def delBook(request,bid): # 查询出图书 b=BookInfo.objects.get(id=int(bid)) b.delete() return redirect('/index/')
10,配置url
打开test03/urls.py文件,配置url如下:
from django.conf.urls import include, urlfrom django.contrib import adminurlpatterns = [ url(r'^admin/', include(admin.site.urls)), # 配置成功之后去booktest的urls文件中找对应的视图函数 url(r'^',include('booktest.urls'))]
在booktest应用下创建urls.py文件,代码如下:
from . import viewsfrom django.conf.urls import urlurlpatterns=[ url(r'^index/$',views.index), url(r'^addBook/$',views.addBook), url(r'^delBook/$',views.delBook)]
11,创建模板
- 打开test03/settings.py文件,配置模板查找目录TEMPLATES的DIRS。
‘DIRS’: [os.path.join(BASE_DIR,’templates’)],
- 模板代码如下:
<html><head> <title>Python-晓可的图书网站</title></head><body><a href="/addBook/">创建</a><ul>{%for book in books%}<li>{{book.btitle}}--<a href="/delBook{{book.id}}/">删除</a></li>{%endfor%}</ul></body></html>
12,运行
- 运行服务器
python manage.py runserver
- 运行结果如下:(截取一部分图片)
- 查看booktest_bookinfo表信息,可以得知增加和删除图书信息
13,本项目放在github上地址如下:
https://github.com/ITXIAOKE/PythonWebSite/tree/master
- Django使用mysql操作实战系列之七
- django使用mysql系列
- Mysql 体系结构系列之七
- Django连接mysql出问题系列之九
- Linux系列之mysql安装(七)
- MySQL系列之七:主从复制
- django操作mysql数据库&models的使用
- Django使用pymysql作为mysql操作backend
- SCCM2012 R2实战系列之七:软件分发(exe)
- SSM框架实战系列之七_Spring框架
- Django实战系列(一)
- struts2系列七之使用ModelDriven<User>
- django cpu监控之七-----使用wmi获取CPU数据
- Django学习之路(七)生产环境中的使用
- Python实战之MySQL数据库操作
- Python实战之MySQL数据库操作
- **MYSQL** 系列七
- Django安装mysql-python驱动系列之八
- AtCoder:Connected?(思维)
- 关于Python的一些学习资料总结
- gradle包含库出现问题
- bzoj3110 K大数查询(整体二分+线段树)
- EasyX鼠标函数和MBCS、Unicode编码
- Django使用mysql操作实战系列之七
- arrayQueue 和linkedQueue
- tomcat集群--整合Apache服务器,采用mod_proxy连接模式
- apk签名之用 jarsigner签名
- mySQL 截取小数
- Sql性能检测工具:Sql server profiler和优化工具:Database Engine Tuning Advisor
- Android系统进程间通信(IPC)机制Binder中的Server启动过程源代码分析
- 关于Android自动化测试Monkey和MonkeyRunner不能正常运行的说明
- Drools WorkBench 安装(Mysql版)