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

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,具体模型代码

# 定义图书模型类BookInfo
class 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)

# 定义英雄模型类HeroInfo
class 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 date
from django.shortcuts import render,redirect
from 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, url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    # 配置成功之后去booktest的urls文件中找对应的视图函数
    url(r'^',include('booktest.urls'))
]

在booktest应用下创建urls.py文件,代码如下:

from . import views
from django.conf.urls import url

urlpatterns=[
    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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容