Django第四天-实现简单的页面跳转与数据传递

  1. 创建项目

django-admin startproject  mysite3
  1. 创建应用bookstore

python manage.py startapp bookstore
  1. 修改settings.py文件(自行百度)

  1. 修改你mysite3文件夹下的urls文件,实现路由分流

  1. 在bookstore文件下新建urls.py文件

from django.urls import path,include
from bookstore import views

urlpatterns = [
]
  1. 在修改bookstore文件夹下的models文件

from django.db import models

# Create your models here.
class Book(models.Model):
    title = models.CharField('书名',max_length=50,default='',unique=True)
    pub = models.CharField('出版社',max_length=100,default='')
    price = models.DecimalField('价格',max_digits=7,decimal_places=2)
    market_price = models.DecimalField('零售价',max_digits=7,decimal_places=2,default=0.0)
    active = models.BooleanField('是否活跃',default=True)

    class Mete:
        db_table = 'book'

    def __str__(self):
        return '%s  %s  %s  %s'%(self.title,self.pub,self.price,self.market_price)
  1. 在本地mysql创建数据库

  1. 执行数据迁移

python manage.py makemigrations
python manage.py migrate
  1. 在bookstore/views文件下增加测试函数

from django.http import HttpResponse
def index(request):
    return HttpResponse("this is bookstore")
  1. 在bookstore/urls文件下新增路由

from django.urls import path,include
from bookstore import views

urlpatterns = [
    path('index',views.index),
]
  1. 运行项目,访问bookstore/index页面

python manage.py runserver

功能一、展示全部数据

  1. 修改urls文件,新增路由展示全部数据

from django.urls import path,include
from bookstore import views

urlpatterns = [
    path('index',views.index),
    path('all_book',views.all_book),
]
  1. 在views文件中新建函数all_book

def all_book(request):
    books = Book.objects.filter(active=True)# active=True表示该数据没有被伪删除
    return render(request,'all_book.html',locals()) #locals()表示,把books对象转成字典形式,传递给all_book.html页面
  1. 在bookstore文件下下新建templates文件夹 在该文件夹下新建all_boook.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>查看所有书籍页面</title>
</head>
<body>

<table border="1">
    <tr>
        <th>id</th>
        <th>title</th>
        <th>pub</th>
        <th>price</th>
        <th>market_price</th>
        <th>op</th>
    </tr>
    {% for book in books %} 
<!--    循环遍历books字典  该字典是views文件中all_book()函数传进来的值-->
    <tr>
        <td>{{ book.id }}</td>
        <td>{{ book.title }}</td>
        <td>{{ book.pub }}</td>
        <td>{{ book.price }}</td>
        <td>{{ book.market_price }}</td>
        <td>
            <a href="">更新</a>
            <a href="">删除</a>
        </td>
    </tr>
    {% endfor %}
</table>

</body>
</html>
  1. 访问bookstore/all_book

功能二、更新操作

  1. 在上方的all_boook.html文件中,添加更新操作的链接(注意该链接是绝对路径,相对路径可能会出错)

  1. 在urls文件里新增更新路由

path('updata_book/<int:id>',views.updata_book),
  1. 在views文件里新增更新函数updata_book()

def updata_book(request,id):
    try:
        book = Book.objects.get(id=id) # 第一个id表示Book类型数据的id字段  第二个id表示传入的参数id
# 这里一定要用try except包含 防止没有获得唯一数据报错
    except:
        HttpResponse('the book is not exits')

    if request.method=='GET':   #在all_boook.html页面中,点击更新操作后,会执行GET请求
        return render(request, 'updata_book.html', locals())
    else:  
        book.price=request.POST['price'] # 更新数据
        book.market_price=request.POST['market_price']
        book.save()
        return HttpResponseRedirect('/bookstore/all_book') #重定向
#     这里也是绝对路径
  1. 新建templates/updata_book.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>更新书籍信息</title>
</head>
<body>
<!-- action="/bookstore/updata_book/{{book.id}}  注意是绝对路径-->
<form action="/bookstore/updata_book/{{book.id}}" method="POST">
    {% csrf_token %}
<!--    解决跨站请求的问题-->
    <p>
        title<input  type="text" value="{{book.title}}" disabled>
<!--        disabled 表示 不可被修改-->
    </p>
    <p>
        pub<input value={{book.pub}} type="text" disabled>
    </p>
    <p>
        price<input value={{book.price}} type="text" name="price">
    </p>
    <p>
        market_price<input value={{book.market_price}} type="text" name="market_price">
    </p>
    <p>
        <input type="submit" value="更新">
    </p>
</form>

</body>
</html>
  1. 执行过程

功能三、删除操作

  1. 在all_book.html页面添加删除链接

  1. 在urls文件中新增删除路由

  1. 在views.py文件中新增删除函数

def delete_book(request,id):
    try:
        book = Book.objects.get(id=id,active=True)
    except:
        HttpResponse('delete_book error')
        
    book.active=False  # 这里用了伪删除的方法,只是把该条数据标记为不活跃,没有真正删除
    book.save()

    return HttpResponseRedirect('/bookstore/all_book')
  1. 删除过程

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值