Django框架(7) —— 数据库配置、重定向

创建一个新的项目test2,应用名依然叫bookltest,目录结构如下:

 

Django配置使用mysql数据库

修改test2/settings.py中的DATABASES

注意:django框架不会自动帮我们生成mysql数据库,所以我们需要自己去创建

配置完数据库后需要安装pymysql包,pip install pymysql,安装完后需要在test2/__init__.py里添加如下内容:

import pymysql
pymysql.install_as_MySQLdb()

然后可以启动服务。


复习案例

1、设计模型类并生成表

  • 设计BookInfo,增加属性b_read和b_comment,另外设置软删除标记属性isDelete。
  • 设计HeroInfo类,增加软删除标记属性isDelete。

软删除标记:删除数据时不做真正的删除,而是把标记数据设置为1表示删除,目的是防止重要的数据丢失。

2、编写视图函数并配置URL。

3、创建模板文件。

拆解功能:

1、图书信息展示页。

  • 设计url,通过浏览器访问 http://127.0.0.1:8000/index/ 时显示图书列表页。
  • 设计url对应的视图函数index,查询出所有图书的信息,将这些信息传递给模板文件。
  • 编写模板文件index.html,遍历显示出每一本图书的信息并增加新建和删除超链接。

2、图书信息新增

b) 设计url对应得视图函数create,并重定向到/index显示图书页

 

3、图书信息删除

  • 设计url,通过浏览器访问 http://127.0.0.1:8000/delete数字/  删除数据库中对应的一条图书数据,其中数字是点击的图书的id。
  • 设计url对应视图函数delete,获取图书的id,进行删除,并重定向到/index显示图书页

4、测试数据

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

insert into booktest_bookinfo(b_title,b_pubdate,b_read,b_comment,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(h_name,h_gender,h_book_id,h_comment,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);

重定向

页面重定向:服务器不返回页面,而是告诉浏览器再去请求其他的url地址

 

示例代码:

booktest/models.py

from django.db import models

# Create your models here.

class BookInfo(models.Model):
    """图书模型类"""
    b_title = models.CharField(max_length=20)  # 书名
    b_pubdate = models.DateField()  # 出版日期
    b_read = models.IntegerField()  # 阅读量
    b_comment = models.IntegerField()  # 评论量
    isDelete = models.BooleanField(default=False)  # 软删除标记


class HeroInfo(models.Model):
    """英雄模型类"""
    h_name = models.CharField(max_length=20)  # 英雄名
    h_gender = models.BooleanField(default=False)  # 性别
    h_kungfu = models.CharField(max_length=200)  # 功夫
    h_book = models.ForeignKey('BookInfo')  # 关系属性
    isDelete = models.BooleanField(default=False)  # 软删除标记

booktest/views.py

import datetime
import random
from django.shortcuts import render, redirect  # 重定向函数
from django.http import HttpResponse, HttpResponseRedirect
from booktest.models import BookInfo, HeroInfo

# Create your views here.

def index(request):
    """显示图书信息"""
    # 查询所有图书信息
    book_list = BookInfo.objects.all()
    # 使用模版
    return render(request, 'booktest/index.html', {'book_list': book_list})


def create(request):
    """随机新增一本图书"""
    book_list = [
        ('书剑恩仇录', '1955-4-6'), ('碧血剑', '1956-9-6'), ('天龙八部', '1966-5-23'),
        ('飞狐外传','1957-10-6'), ('鸳鸯刀','1961-11-6'), ('连城诀','1969-5-23')
    ]
    book = random.choice(book_list)
    # 创建BookInfo对象
    b = BookInfo()
    b.b_title = book[0]
    b.b_pubdate = datetime.date(*map(int, book[1].split('-')))  # 将字符串转换date格式
    b.b_read = 0
    b.b_comment = 0
    # 保存数据
    b.save()
    # return HttpResponse('ok')
    # 返回应答,让浏览器访问/index首页, 重定向
    # return HttpResponseRedirect('/index')
    return redirect('/index')

def delete(request, b_id):
    """删除点击的图书"""
    # 获取b_id对应图书
    book = BookInfo.objects.get(id=b_id)
    # 删除
    book.delete()
    # 重定向·让浏览器访问/index首页
    # return HttpResponseRedirect('/index')
    return redirect('/index')

booktest/urls.py


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

urlpatterns = [
    url(r'^index/$', views.index),  # 显示所有图书信息
    url(r'^create$', views.create),  # 新增一本图书
    url(r'^delete(\d+)$', views.delete),  # 删除点击的图书
]

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>图书信息</title>
</head>
<body>
<a href="/create">新增</a>
<br>
图书信息如下:
<ul>
    {#遍历图书列表#}
    {% for book in book_list %}
        <li>{{ book.b_title }} ---- <a href="/delete{{ book.id }}">删除</a>
        </li>
    {% endfor %}
</ul>
</body>
</html>

 

效果展示

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轨迹|

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值