前言
  1. 目标:实现Django通过表单的GET方式和POST方式提交数据,并添加到数据库 。
  2. OS:win10 x64
  3. Django:1.11.8
  4. Python: 3.6
  5. 本文完整示例:完整示例;

虽然使用的系统和软件没有什么影响,但还是交代一下。

二、实现思路
  • 从用户角度考虑

    1. 访问一个url,返回填写表单页面;
    2. 在表单页面填写信息,并提交;
    3. 若提交成功,返回提交成功页面,并提供返回添加页面和图书列表跳转链接;
    4. 若提交失败,则返回操作失败页面,并提供跳转继续添加链接;
  • 从开发者角度

    1. 用户请求一个url,传递一个页面给用户;
    2. 用户填写数据后提交,这时需要判断字段是否合法,合法则允许提交;不合法则提示哪一项不合法,提示用户修改;
    3. 用户提交成功后,修改数据库;若修改数据库等操作成功,则传递成功页面;否则,返回失败页面;
    4. 继续等待用户其他url请求。
三、实现步骤

接下来,将从开发者的角度实现。

假设有这样一个场景,图书管理员需要向数据库中录入书籍以及作者的信息,书籍只具有“书名“属性,作者具有"姓名" 和 "年龄"属性。

1. 用户访问url,传递一个页面给用户
  • 在urls.py文件中添加路由
urlpatterns = [
# 以上还有很多url路由,这里仅列出需要的路由
## 利用表单增加图书,实现前台与数据库交互
url(r'^addbook/$', polls_views.addbook),
]

以上url匹配地址http://127.0.0.1/addbook/,当用户访问该地址时,返回一个页面给用户。

  • 返回给用户页面bookadd.html

在views.py文件中添加方法,返回页面bookadd.html。

## 返回给用户页面bookadd.html
def addbook(request):
return render(request, 'bookadd.html')

在templates目录下新建bookadd.html文件,添加HTML代码。

HTML代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>增加图书</title>
<script src="../js/jquery-2.1.3.min.js"></script>
<style>
* {
margin: 0;
padding: 0; </style>
</head>
<body>
<h2>增加图书</h2>
<h3>GET方式</h3>
<form action="/addbooktodatabase/" method="get" name="addbook">
<p><span>书名:</span><input type="text" placeholder="书名" name="book_name"></p>
<p><span>作者:</span><input type="text" placeholder="作者" name="author"></p>
<p><span>作者年龄:</span><input type="text" placeholder="作者年龄" name="author_age"></p>
<input type="reset">&nbsp;&nbsp;&nbsp;&nbsp;<input type="submit" value="增加">
</form> <h3>POST方式</h3>
<form action="/addbooktodatabase/" method="post" name="addbook">
{% csrf_token %}
<p><span>书名:</span><input type="text" placeholder="书名" name="book_name"></p>
<p><span>作者:</span><input type="text" placeholder="作者" name="author"></p>
<p><span>作者年龄:</span><input type="text" placeholder="作者年龄" name="author_age"></p>
<input type="reset">&nbsp;&nbsp;&nbsp;&nbsp;<input type="submit" value="增加">
</form> </body>
</html>

显示效果如下:

  • 在用户本地页面判断操作是否合法

使用JavaScript或JQuery实现判断,这个实现方法很多,不再赘述。

  • 用户提交成功,后台传递给指定url,更新数据库

在urls.py文件中添加url路由

urlpatterns = [
# 以上还有很多url路由,这里仅列出需要的路由
## 处理表单提交的数据,实现前台与数据库交互
url(r'^addbooktodatabase/', polls_views.addbooktodatabase),
]

在views.py中增加更新数据库方法

# 向图书馆增加数据GET或POST方法方法
def addbooktodatabase(request):
# 获取参数book_name,author,author_age
if request.method == "GET":
book_name = request.GET["book_name"]
author_name = request.GET["author"]
author_age = request.GET["author_age"]
else:
book_name = request.POST["book_name"]
author_name = request.POST["author"]
author_age = request.POST["author_age"] ## 先增加作者信息
from polls.models import Person
person = Person()
person.name = author_name
person.age = author_age
person.save()
## 增加图书信息
from polls.models import Book
bookadded = Book(name=book_name)
# 保存修改
bookadded.person_id = person.id
bookadded.save()
# 重定向到添加成功页面
from django.http import HttpResponseRedirect
return HttpResponseRedirect('/addok/')
  • 返回页面addok/html

在urls.py文件中添加url路由

urlpatterns = [
# 以上还有很多url路由,这里仅列出需要的路由
# 添加成功后返回添加成功页面addok
url(r'^addok/', polls_views.addok),
]

在templates目录下新建addok.html文件,添加HTML代码。

HTML代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加成功</title>
<style>
* {
margin: 0;
padding: 0;
}
a{
text-decoration:none;
}
</style>
</head>
<body>
<div>
<p>添加图书成功</p>
<p><a href="/addbook/">继续添加</a></p>
<p><a href="/booklist/">查看图书列表</a></p>
</div>
</body>
</html>

显示效果如下:

  • 当用户点击“查看图书列表”时,传递bookList.html页面

bookList.html在另一篇博文中已实现,请参考:利用Django中的url方法实现地址动态拼接自动生成超链接地址

显示效果如下:

可以看到,图书“水浒传已经添加成功”。

四、总结
  1. 本文完整示例:完整示例;
  2. 能力有限,欢迎指错。

注意:

  1. 这里并没有实现页面的安全检测,可自行通过JS或JQuery实现;
  2. 在接收数据时,由于GET和POST方法取值不同,需要对GET和POST方法进行判定;
  3. 为了防止恶意SQL注入,对用户输入的内容字段也应该进行检测。

Django使用表单操作数据库的更多相关文章

  1. Django学习笔记之数据库-数据库与模型

    MySQL数据库 在网站开发中,数据库是网站的重要组成部分.只有提供数据库,数据才能够动态的展示,而不是在网页中显示一个静态的页面.数据库有很多,比如有SQL Server.Oracle.Postgr ...

  2. python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API

    python  Django教程  之 模型(数据库).自定义Field.数据表更改.QuerySet API 一.Django 模型(数据库) Django 模型是与数据库相关的,与数据库相关的代码 ...

  3. 循序渐进Python3(十二) --2--  web框架之django简单实现oracle数据库操作

    在 Django 中构建 Oracle 数据库支持的 Web 应用程序 了解如何配置 Django 以便与 Oracle 数据库交互,并使用 ORM 进行数据库连接.             产能在软 ...

  4. Django开发笔记之数据库的设计

    后台采用Django开发,可以体会到开发的便利之处,对于一个项目来说,首先最重要的是数据库的设计,那么在Django下数据库设计主要是如下步骤: 1,需求分析,这点子不用多说,而我也深刻体会到了没有原 ...

  5. Django 反向生成 从数据库生成Model

    Django 反向生成 从数据库生成Model 使用Django生成Model python manage.py inspectdb或python manage.py inspectdb > m ...

  6. Scrapy中使用Django的Model访问数据库

    Scrapy中使用Django的Model进行数据库访问 当已存在Django项目的时候,直接引入Django的Model来使用比较简单 # 使用以下语句添加Django项目的目录到path impo ...

  7. Python之道1-环境搭建与pycharm的配置django安装及MySQL数据库配置

    近期做那个python的开发,今天就来简单的写一下开发路线的安装及配置, 开发路线 Python3.6.1+Pycharm5.0.6+Django1.11+MySQL5.7.18 1-安装Python ...

  8. Django视图,与数据库交互并返回数据

    环境:python 2.7.13  数据库:sqlite3(Django自带) 在学习Django的时候,遇到了困难.大概就是取到数据库数据后一直不能转成json数据.最后终于自己琢磨解决了. 要点就 ...

  9. Django的ORM实现数据库事务操作

    在Django中实现数据库的事务操作 在学习MySQL数据库时,MySQL数据库是支持原子操作的. 什么是数据库的原子操作呢??打个比方,一个消费者在一个商户里刷信用卡消费. 交易正常时,银行在消费者 ...

随机推荐

  1. HDU 4902 Nice boat 成段线段树

    操作1 的时候标记deng[rt]表示以下一段数都是与当前节点的值同样 下次操作2时直接对有deng标记的节点gcd更新 (可能还能够更简单) #include <stdio.h> #in ...

  2. java面试第七天

    反射: 反射:在运行时动态分析或使用一个类进行工作. java.lang.Class类:描述类信息的类. 类对象:描述一个类信息的对象,当虚拟机加载类的时候,就会创建这个类的类对象并加载该对象,Cla ...

  3. SwaggerUI+SpringMVC——构建RestFul API的可视化界面

    今天给大家介绍一款工具,这个工具眼下可预见的优点是:自己主动维护最新的接口文档. 我们都知道,接口文档是非常重要的,可是随着代码的不断更新,文档却非常难持续跟着更新,今天要介绍的工具,完美的攻克了这个 ...

  4. 基础url、相对url、绝对url

    #基础url.相对url.绝对url #HTTP权威指南 34页 •绝对URL:包含了访问资源所需的全部信息,如:http://www.163.com/new.html •相对URL:去除基础的部分, ...

  5. 转载:在PHP语言中使用JSON和将json还原成数组

    一.json_encode() 1 2 3 4 <?php $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); e ...

  6. ubuntu 重新挂载home

    vmware虚拟机下操作: 1 在Vmware中创建新硬盘. 2 启动Ubuntu 在终端输入:sudo fdisk -l ,可以看到 -------------------------------- ...

  7. HDUOJ-----1166敌兵布阵

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  8. INFORMATION_SCHEMA数据库介绍

    删除mysql数据库某一张主键表的所有外键关系 SELECT CONCAT('alter table ', TABLE_NAME , ' drop foreign key ', constraint_ ...

  9. ssh/scp 远程连接ssh非默认端口方法

    ssh -p port <username>@<IP>

  10. DBA_实践指南系列2_Oracle Erp R12系统安装配置设定Setup(案例)

    2013-12-02 Created By BaoXinjian