Django知识第三天

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

创建项目test4

使用MySQL数据库,这是Web项目首选的数据库。
进入虚拟环境py_django。

workon py_django

在用户目录下/pytest目录下创建项目test4。

django-admin startproject test2

打开test4/settings.py文件,找到DATABASES项,默认使用SQLite3数据库

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

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

创建mysql数据库,使用navicat连接数据库



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

python manage.py startapp booktest

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

pip install pymysql

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

import pymysql
pymysql.install_as_MySQLdb()

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

'booktest',

定义模型类

  • 模型类被定义在"应用/models.py"文件中,此例中为"booktest/models.py"文件。
  • 模型类必须继承自Model类,位于包django.db.models中。
  • 提示:对于重要数据使用逻辑删除。
1.打开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=False) #英雄性别false是男性
    isDelete = models.BooleanField(default=False) #逻辑删除
    hcomment = models.CharField(max_length=200) #英雄描述信息
    hbook = models.ForeignKey('BookInfo') #英雄与图书表的关系为一对多,所以属性定义在英雄模型类中
2.迁移

生成迁移文件。

python manage.py makemigrations
python manage.py migrate

插入数据

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,'templates/booktest/index.html',{'booklist':booklist})

def detail(request,bid):
    book = BookInfo.objects.get(id=int(bid))
    heros = book.heroinfo_set.all()
    return render(request,'templates/booktest/detail.html',{'book':book,'heros':heros})
def index2(request):
    list = BookInfo.objects.all()
    return render(request,'templates/booktest/index2.html',{'list':list})

def create(request):
    b=BookInfo()
    b.btitle = '神雕侠侣'
    b.bpub_date = date(1992,2,6)
    b.bcomment = 20
    b.bread = 500
    b.isDelete = False
    b.save()
    return redirect('/list')
def delete(request,id):
    book = BookInfo.objects.get(id=int(id))
    book.delete()
    return redirect('/list')

配置url

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

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

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)), #引入booktest的url配置
    url(r'^',include('booktest.urls')),
]

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

from django.conf.urls import include, url
from django.contrib import admin
from booktest import views
urlpatterns = [
    url(r'^$',views.index),
    url(r'^detail(\d+)$',views.detail),
    url(r'^list$',views.index2),
    url(r'^create$',views.create),
    url(r'^delete(\d+)$',views.delete),
]

模板代码如下:




运行

python manage.py runserver

运行结果如下



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容