Django第三天

使用Mysql数据库完成一个MVT设计的图书英雄案例

创建项目

进入虚拟环境py_django

workon py_django

在用户目录下/pytest目录下创建项目(test3是项目名)。

cd pytest
django-admin startproject test3

打开test3/settings.py文件,找到DATABASES项,默认使用SQLite3数据库
(环境别忘调了)



修改为使用MySQL数据库,代码如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',#数据库
        'NAME': 'test2', # 数据库名字
        'USER':'root', #数据库登录用户名
        'PASSWORD':'root',#数据库登录密码
        'HOST':'localhost',#数据库所在主机
        'PORT':3306, #数据库端口
    }
}

注意:数据库test2 Django框架不会自动生成,需要我们自己进入mysql数据库去创建。使用navicat连接数据库


再使用mysql数据库时就会出现错误,把数据库切换成了mysql,需要安装pymysql模块之后,Django框架才可以操作mysql数据库。安装命令如下:

pip install pymysql

安装成功之后,在test3/init.py文件中加上如下代码:

import pymysql
pymysql.install_as_MySQLdb()

进入test3目录,创建应用booktest。

cd test3
python manage.py startapp booktest

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


定义模型类

模型类被定义在"应用/models.py"文件中,此例中

  • 为"booktest/models.py"文件。
  • 模型类必须继承自Model类,位于包django.db.models中。
  • 提示:对于重要数据使用逻辑删除。
打开booktest/models.py文件,定义模型类如下
from django.db import models

#定义图书模型类BookInfo
class BookInfo(models.Model):
    #书名
    btitle =models.CharField(max_length=20)
    #出版日期
    bpub_date=models.DateField()
    #阅读数
    bread=models.IntegerField(default=0)
    #评论量
    bcomment = models.IntegerField(default=0)
    #逻辑删除
    isDelete=models.BooleanField(default=False)
#定义英雄模型类HeroInfo
class HeroInfo(models.Model):
    # 英雄姓名
    hname = models.CharField(max_length=20)
    # 英雄性别
    hgender = models.BooleanField(default=True)
    # 逻辑删除
    isDelete = models.BooleanField(default=False)
    # 英雄描述信息
    hcomment = models.CharField(max_length=200)
    # 英雄与图书表的关系为一对多,所以属性定义在英雄模型类中
    hbook = models.ForeignKey('BookInfo')

迁移

python manage.py makemigrations
python manage.py migrate

测试数据

右键数据库test2点击命令列界面插入数据

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,hcomment,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);

定义视图

打开booktest/views.py文件,定义视图代码如下:

from django.shortcuts import render, redirect
from booktest.models import *
from  datetime import date
# Create your views here.
# 显示图书列表
def index(request):
    #  查询所有的图书信息
    booklist = BookInfo.objects.all()
    return render(request, 'booktest/index.html', {'booklist':booklist})
#  点击这本书,接下来显示这本书里所有的英雄
def detail(request, bid):
    #  根据书号进行查询
    book = BookInfo.objects.get(id=int(bid))
    # 查找book图书的所有英雄
    heros = book.heroinfo_set.all()
    return render(request,'booktest/detail.html',{'book':book,'heros':heros})
# 增加一本书
def create(request):
    book = BookInfo()
    book.btitle = '天涯明月刀'
    book.bpub_date = date(1999, 2, 4)
    book.save()
    return redirect('/')
    # 删除一本书
def delete(request, bid):
    # 根据id获取这个图书对象
    book = BookInfo.objects.get(id=int(bid))
    book.delete()
    return redirect('/')

配置url

打开test3/urls.py文件,配置url如下:

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^', include('booktest.urls')),
]

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

from django.conf.urls import include, url
from booktest import views

urlpatterns = [
    url(r'^$', views.index),
    url(r'^(\d+)/$', views.detail),
    url(r'^create/$', views.create),
    url(r'^delete(\d+)/$', views.delete),
]

创建模板

打开test3/settings.py文件,配置模板查找目录TEMPLATES的DIRS。

'DIRS': [os.path.join(BASE_DIR,'templates')],

创建index.html和detail.html文件



index.html代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>图书列表</title>
</head>
<body>
<h1>图书列表</h1>
<a href="/create/">创建一本书</a>
<ul>
{#    遍历图书的列表#}
    {%for book in booklist%}
        <li>
            <a href="{{ book.id }}">{{ book.btitle }}</a> &nbsp; &nbsp; &nbsp; &nbsp;阅读数量{{ book.bread }}
         ====> <a href="/delete{{ book.id }}">删除</a>
        </li>
    {%endfor%}
</ul>
</body>
</html>

detail.html代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>{{ book.btitle }}</h1>
<ul>
    {%for hero in heros %}
    <li>{{ hero.hname }}======》{{ hero.hcomment }}</li>
     {%endfor %}
</ul>
</body>
</html>

运行

python manage.py runserver

运行初始页面



创建一本书——天涯明月刀(写死的)



删除天龙八部

点击笑傲江湖书名链接


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

推荐阅读更多精彩内容