python实例,,Django使用my


Django使用mysql操作实战系列之七

原创 2017年06月27日 16:46:04 标签:django /mysql 721

1,创建项目test03

创建项目test03。

django-adminstartprojecttest03


打开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

createdatabasetest2charset=utf8;



3,创建booktest应用

进入test03目录,创建应用booktest

cdtest03pythonmanage.pystartappbooktest

4,注册booktest应用


将应用booktest注册到项目中:打开test03/settings.py文件,找到INSTALLED_APPS项,加入如下代码:

技术分享


5,定义模型类


模型类被定义在“应用/models.py”文件中,此例中为“booktest/models.py”文件。

模型类必须继承自Model类,位于包django.db.models中。

对于重要数据使用逻辑删除。


6,具体模型代码

#定义图书模型类BookInfoclassBookInfo(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)#定义英雄模型类HeroInfoclassHeroInfo(models.Model):#英雄姓名,不唯一,可以有重名的英雄hname=models.CharField(max_length=50,unique=False)#英雄性别,默认False为男性,也可以设为Integer类型,0或者1hgender=models.BooleanField(default=False)isDelete=models.BooleanField(default=False)#英雄的描述hcontent=models.CharField(max_length=500)#图书与英雄的关系为一对多的关系,所以属性定义在英雄的模型类中hbook=models.ForeignKey(‘BookInfo‘)


7,迁移


生成迁移文件。

pythonmanage.pymakemigrations

执行迁移。

pythonmanage.pymigrate

技术分享

打开数据库的命令行,

技术分享

表booktest_bookinfo结构如:

默认值并不在数据库层面生效,而是在django创建对象时生效。

技术分享

这里写图片描述

表booktest_heroinfo结构如下:

Django框架会根据关系属性生成一个关系字段,并创建外键约束。

技术分享

8,建立测试数据


在数据库命令行中,复制如下语句执行,向booktest_bookinfo表中插入测试数据:

insertintobooktest_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表中插入测试数据:

insertintobooktest_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文件,定义视图代码如下:

fromdatetimeimportdatefromdjango.shortcutsimportrender,redirectfrombooktest.modelsimportBookInfo#查询所有图书并显示的视图函数defindex(request):books=BookInfo.objects.all()heros=HeroInfo.objects.all()returnrender(request,‘booktest/index.html‘,{‘books‘:books,‘heros‘:heros})#新增图书视图视图函数defaddBook(request):book=BookInfo()book.btitle=‘晓可自传‘book.bpub_date=date(2017,6,27)book.save()#returnHttpResponse(‘ok‘)#重定向跳转到首页returnredirect(‘/index/‘)#根据图书id删除一本书的视图函数defdelBook(request,bid):#查询出图书b=BookInfo.objects.get(id=int(bid))b.delete()returnredirect(‘/index/‘)


10,配置url

打开test03/urls.py文件,配置url如下:fromdjango.conf.urlsimportinclude,urlfromdjango.contribimportadminurlpatterns=[url(r‘^admin/‘,include(admin.site.urls)),#配置成功之后去booktest的urls文件中找对应的视图函数url(r‘^‘,include(‘booktest.urls‘))]在booktest应用下创建urls.py文件,代码如下:from.importviewsfromdjango.conf.urlsimporturlurlpatterns=[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’)],

模板代码如下test03/templates/booktest/index.html:

<html><head><title>Python-晓可的图书网站</title></head><body><ahref="/addBook/">新增图书</a><ul>{%forbookinbooks%}<li>书名:{{book.btitle}}--<ahref="/delBook{{book.id}}/">删除</a></li>{%endfor%}</ul><br/><br/><h2>所有英雄如下:</h2><ul>{%forheroinheros%}<li>姓名:{{hero.hname}}--大招:{{hero.hcontent}}</li>{%endfor%}</ul></body></html>


12,运行


运行服务器

pythonmanage.pyrunserver

运行结果如下:

技术分享

查看booktest_bookinfo表信息,可以得知增加和删除图书信息

技术分享


本文出自 “11726068” 博客,谢绝转载!

python实例

评论关闭