专栏首页毛利学PythonDjango项目开发(三)

Django项目开发(三)

上次完成了首页的,还有3个简单的小需要还没有完善

  • 添加书籍的需求
  • 删除书籍的需求
  • 书籍的详细页
首先介绍下 MVC

MVC简介

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

  • Model(模型)表示应用程序核心(比如数据库记录列表)。
  • View(视图)显示数据(数据库记录)。
  • Controller(控制器)处理输入(写入数据库记录)。

Django框架遵循MVC设计,并且有一个专有名词:MVT

  • M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。
  • V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。
  • T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。

添加书籍

任何开发都是先编写后端,在配置路由,最后渲染前端页面

从View.py开始

添加书籍的本身就是一个提交的过程,所以是POST请求,不是get请求
from django.shortcuts import render,redirect,reverse
from django.db import connection

def get_corsor():
    # 创建游标
    return connection.cursor()
def add_book(request):
    if request.method == 'GET':
        return render(request,'add_book.html')
    else:
        name = request.POST.get("name")
        author = request.POST.get("author")
        cursor = get_corsor()
        cursor.execute("insert into front_book_manager(id,name,author) values(null,'%s','%s')" % (name,author))
        # redirect 重新定向 reverse通过已命名的URL进行渲染
        return redirect(reverse('index'))
代码解析
  • 一开始请求是get请求,来到了add_book.html 页面中
  • 因为提交是post请求,将数据写进数据库,然后在从数据库拿到数据,重定向到首页,刚刚添加的图书就可以显示

在urls.py配置路由

path('add_book/', views.add_book,name='add_book'),

最后就是前端add_book.html 页面的编写

{% extends 'base.html' %}
{% block content %}
    <form action="" method="post">
        <table>
            <tbody>
                <tr>
                    <td>书名:</td>
                    <td><input type="text" name="name"></td>
                </tr>
                <tr>
                    <td>作者:</td>
                    <td><input type="text" name="author"></td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="submit" value="提交"></td>
                </tr>
            </tbody>
        </table>
    </form>
{% endblock %}

在前端编写一个表单不是什么难事,注意以下几点

  • input标签必须带上name属性,不然提交不了
  • method="post" 表明是post请求,虽然是form默认post请求。

效果如下

书籍的详细页

现在要在首页点击书名跳转书籍的详细页

分析接口

接口就是前后端约定的api,就是url请求需要啥参数

book_detail/<int:book_id>/这是确保book_id 是int类型

现在规定了book_detail/book_id 是urls

view.py
def book_detail(request,book_id):
    # 上面定义了创建游标了
    cursor = get_corsor()
    # 根据book_id 筛选
    cursor.execute("select id,name,author from front_book_manager where id=%s" % book_id)
    # 得到返回值book是一个元组
    book = cursor.fetchone()
    return render(request,'book_detail.html',context={"book":book})

在urls.py配置路由

path('book_detail/<int:book_id>/', views.book_detail,name='book_detail')

book_detail.html 页面的编写

{% extends 'base.html' %}
{% block content %}
    <p>书名:{{ book.1 }}</p>
    <p>作者:{{ book.2 }}</p>
    <form action="{% url 'delete_book' %}" method="post">
        # 拿id来删除
        <input type="hidden" name="book_id" value="{{ book.0 }}"> 
        <input type="submit" value="删除按钮">
    </form>
{% endblock %}

效果如下

删除书籍

现在进去了书籍的详细页,就要删除图书

接口是delete_book/

View.py 代码编写

def delete_book(request):
    if request.method == 'POST':
        # 上面post请求拿到book_id
        book_id = request.POST.get('book_id')
        cursor = get_corsor()
        cursor.execute("delete from front_book_manager where id=%s" % book_id)
        return redirect(reverse('index'))
    else:
        raise RuntimeError("删除图书的method错误!")

urls.py配置路由

path('delete_book/',views.delete_book,name='delete_book')

效果如下

总结

至此,简单不能再简单的项目基本完成,可以说是django的helloWorld,进门级别。

作为python必须web框架的Django,它的功能强大,内容全面,我们学习Django,其实就是学习一个软件,要理解它的基本原理,把握它整体框架,牢记一些基本规则,剩下的就是不断深入细节,然后熟能生巧、经验多少的问题了。

本文分享自微信公众号 - 毛利学Python(sen13717378202),作者:小sen

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Django项目开发(二)

    上次搭建的django环境,这次来真正的实战开发,项目是比较老的图书管理系统,对于django来说只是一个Hello,world的项目,django的世界比你想...

    用户6029108
  • Django项目环境配置(一)

    Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。它最初是被开发来用于管理劳伦斯出版集团旗下的...

    用户6029108
  • KFold交叉验证

    from sklearn.model_selection import KFold

    用户6029108
  • 接口测试之RESTful

    REST又被称为表征性状态传输,它是指客户端与服务端之间传输信息的一种方式。在REST中并没有严格的标准和规范,它只是规定了一套对通信的约束,当然它也...

    无涯WuYa
  • Ruby设计模式透析之 —— 模板方法(Template Method)

    Java设计模式透析之 —— 模版方法(Template Method) 今天你还是像往常一样来上班,一如既往地开始了你的编程工作。 项目经理告诉你,今天想在...

    用户1158055
  • Python爬虫系列(七)豆瓣图书排行榜(数据存入到数据库)

    豆瓣用户每天都在对“读过”的书进行“很差”到“力荐”的评价,豆瓣根据每本书读过的人数 以及该书所得的评价等综合数据,通过算法分析产生了豆瓣图书250。 网址:豆...

    致Great
  • 谁来检查方法参数合法性

    我们在编程中的函数或者是方法,大多数都是有参数的。参数对于方法来说是很重要的输入数据,传入的参数值的合法性影响着方法的稳定性,严重时甚至可能导致崩溃问题的出现。

    技术小黑屋
  • 查看sedna创建的数据库和集合,文档之类

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

    血狼
  • Go 语言结构体

    Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。 结构体表...

    李海彬
  • 美团点评CAT监控平台研究

    支持 Transaction、Event、Heartbeat、Metric 四种消息模型

    老梁

扫码关注云+社区

领取腾讯云代金券