zoukankan      html  css  js  c++  java
  • 单表的增删改查实例(图书管理 系统)

    一 配置sql

    1)在项目下的settings里配置数据库(先在mysql里创建好名叫sthw的库)

    2)在项目文件下的__init__.py文件中,用mysql替代默认使用的MySQLdb

    二 创建表(字段)

    1)在应用app01models.py文件里创建.写类

       2)数据库同步

    在终端(项目文件夹下)输入:

    Python manage.py makemigrations

    Python manage.py migrate

    四 插入记录

    通过Python插入记录有三种:

    方式一:配置urls----》访问url,触发url对应的函数执行,函数里有创建记录的命令。

    1)在urls.py里配置url 

    2)在视图(views.py)中写query函数

     

    3)访问httP://127.0.0.1:8000/query就批量创建记录了

    方式二:进入python console,在命令行中输入,也可创建记录(不推荐)

    方式三:单独写py文件,配置django环境。

    1)在总项目文件夹下建立xx.py文件

      2)配置django环境

     

    加载环境和manage.py里加载环境方式相同

    3)添加记录,执行该文件 

    四 查看书籍功能

    1)分发路由 

    name为别名(防止后面用到这个路径要反复修改。)后面要写路径,直接写:

    from django.urls import reverse   #reverse是做url别名反向解析

    return redirect(reverse('books'))

    而不是写:

    return redirect('/books')    

    当前面路径(/books/)修改时,后面就不用修改了(注:django不要改别名)

    2)视图(views.py)写逻辑函数

    将字典{'all_objs':all_objs}传给books.htmlbooks.html模板渲染后,经过render方法发到浏览器,展示给用户

    3)写books.html

    A.在总项目文件夹下的templates文件夹下建立books.html

    B.books.html,需要导入bootstrapjquery文件,要进行静态文件配置:

    静态文件配置:

    i.在总项目文件夹下新建statics文件夹(名字不要为static。防止和别名相同)

    ii)在settngs配置静态文件

    iii)将bootstrapjquery文件复制进statics即可

    C.book.html中导入静态文件,然后再开始写网页

    D.html关键代码

    首先数据库查找到数据在all_objsquerset集合里,通过遍历得到book对象,里面就有title,price等值。通过点的方式调用。如book.titleFor循环是段逻辑,因此用{% %}包裹,forloop.counter是变量,就用{{}}渲染。时间用Y-m-d格式输出。 

    4.最后books页面下呈现效果如下:

    五 增加书籍功能

    book.html页面点击‘添加书籍’按钮,开始转入增加书籍页面。因此要现在book.html的添加书籍按钮处,点击转到add_booksurl.

     在标签的href属性写路径。可以上面的路径,但实际要反向解析。

    html里根据别名反向解析出url{% url ‘别名’%} 这是无参形式的。有参形式为:{% url ‘别名’%  参数}

    当然也可直接在地址栏输入网址访问。

    1)分发路由

     2)写视图函数add_books()

    Add_books视图函数由三部分组成:一是返回增加书籍的页面;二是向数据库传送数据;三是返回主页(books页面)

    第一部分:返回添加书籍的页面

    A.返回页面(render

     地址栏是get请求,因此先判断是否methodGET,是返回页面。

    B.add_book.html

    i)导入静态文件

    ii)注意处:

     表单为Post方式提交数据,好与链接获取网页发get方式区分开。由于是Post提交,要进行crsf_token验证,写上。Input里的name为等下接收数据 .get()方法的键。

    C页面效果如下

     第二部分:向数据库传送数据

    接收完数据后开始向数据库写入数据:逻辑在视图函数中完成

    首先,接着前面返回网页后面:是POST请求,执行,数据存取操作

    Request.POST.get()取得传送过来的字典。Get方法的里的字典的键就是Inputname的值。通过控制器在数据库添加数据。(pycharm提供的可视化数据库看不到,Missing drivers下载不了,只能通过Mysql里看)

    第三部分:返回主页(books页面)

    此时返回主页要重定向redirect,不能render.原因:此刻数据有更新,如render则要重新再查一遍数据,然后把数据给网页渲染,再通过renderhtml发给浏览器。耗费大量时间。而重定向直接跳转到books页面,不需要再查询

     重定向也使用的别名。

    上面可以直接写成:

     redirect源码中有reverse

     六 删除书籍

    1books.html点击操作

    books.html页面中的a标签添加路径。点击可以直接转到链接

     路径是通过网页的反向解析写出,而且是有参形式的。为什么是有参的。因为点击不同位置的删除,对应不同的url(后面的数字是Mysql中该条记录的id值)。有参别名的网页反向解析:{%url ‘别名’ 参数%}

    2)路由分发

     d+)是无名分组,匹配路径delete_books后面的数字。注意:一是在视图函数中要加入参数。二是在html文件的别名反向解析中也要添加参数

    (3)视图函数delete_book

     在数据库中找到删除的那个记录,然后删除。 book_id就是mysql里的id

    删除后重新返回首页

     七 编辑书籍

    1)在books.html做按钮功能

     2)路由分发

     3)视图函数edit_book

    edit_book()分为两大部分:一是展示编辑页面(GET),二是对提交的修改的数据进行更新(POST)并展示.

    第一部分:展示编辑页面

     (1)查找到选中的编辑的那条记录。

    后面加了first()。选中的编辑记录就只有一条。Edit_obj要拿到html去渲染(显示已有的内容,再针对那个修改),防止每次通过.0方式调用。就直接拿到Model对象,而不是queryset集合。

    (2)向浏览器返回页面。(有模板渲染。就把数据库查到的参数通过字典的方式交给html文件)

    (3)edit_book.html

    edit_book.html注意点:

     action没写,代表表单提交的数据还是提交到当前页(如127.0.0.1:8000/edit_book/56),等会数据更新会用到这个。Novalidate表示提交表单时浏览器不用验证。

     Input里的name为提取数据时的键,而value为显示在文本框里的值。这个值为数据库里查找出来的值。通过render方法的字典方式传过来。以点的方式调用里面的值。

     4)效果如下:

     第二部分:数据更新

    首先else表示是POST提交方式。

    然后取得提交到数据

    最后更新。

    更新注意:先要找到编辑的记录。这式id还是bookid.因为提交的数据是当前页面,此时包含book_id.而此时的book_id就和要更新的在mysql中的id相同。可以直接写id=book_id查找。然后直接update()更新。

     最后返回Books页面

           

  • 相关阅读:
    SpringMVC访问静态资源
    tomcat 在linux下的关闭问题
    Mysql中MyISAM、InnoDB两种表类型的区别
    大数据——数据库优化
    for循环 java.lang.OutOfMemoryError: Java heap space
    Tomcat内存溢出的三种情况及解决办法分析
    浅谈eclipse生成的.classpath文件(转)
    深入理解java异常处理机制
    漫步ASP.NET MVC的处理管线
    用 javascript 获取当页面上鼠标(光标)位置
  • 原文地址:https://www.cnblogs.com/yq055783/p/12348437.html
Copyright © 2011-2022 走看看