单表操作的内容

我们这里对数据库单表的操作包含增删改查四部分

具体链接数据库的方式我们是通过pymysql,当然你也可以用其他的。

两种方式的概念与区别

1、新url的方式

  主要就是我们每一次向后台提交并访问数据时,后台都会给我们

  跳转到一个新的界面,来完成我们的操作

2、模态对话框的方式

  就是我们可以在页面不刷新的情况下,完成前后台数据之间的交互

两者最大的区别就是新url肯定会刷新页面,而模态框可以让页面不刷新进行交互

新url方式

新url主要利用render和redirect对浏览器页面进行重新刷新,还有a标签进行页面跳转

  a:相当于重新向

  render:模板引擎渲染新页面

  redirect:重定向跳到另一个页面

前端html页面

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>新url</title>
<link rel="stylesheet" href="/static/css/reset.css">
<link rel="stylesheet" href="/static/css/style.css">
<style type="text/css">
{#* { margin:0; padding:0; }#} li { list-style:none; }
{#body { background-color: #222222; }#}
.xs_ul { font-size:0; line-height:0; }
.xs_ul li {display:inline-block; font-size:20px; line-height:20px; background:#fff;}
.xs_ul li a {
display:block;
width:80px;
text-align:center;
padding:15px 30px;
border:1px solid #000;
color:#999; text-decoration:none;
}
.xs_box{
position: absolute;
right: 50px;
top: 40px;
}
</style>
</head>
<body>
<div class="xs_box">
<ul class="xs_ul">
<!--点击增加班级跳转到新url中去添加信息-->
<li class="xs_li_13"><a href="/add_classes/">增加班级</a></li>
</ul>
</div> <section>
<!--for demo wrap-->
<h1>班级列表</h1>
<div class="tbl-header">
<table cellpadding="0" cellspacing="0" border="0">
<thead>
<tr>
<th>ID</th>
<th>班级名称</th>
<th>操作</th>
</tr>
</thead>
</table>
</div>
<div class="tbl-content">
<table cellpadding="0" cellspacing="0" border="0">
<tbody>
{% for item in classes %}
<tr>
<td>{{ item.id }}</td>
<td>{{ item.name }}</td>
<!--a标签提交数据只能通过GET提交,所以删除或者更新我们想要携带数据只能通过?在后面进行拼接-->
<td><a href="/delete_classes/?id={{ item.id }}" onclick="return del()">删除</a>|
<a href="/update_classes/?id={{ item.id }}">更新</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</section> <div class="made-with-love">
Made with
<i>♥</i> by
<a target="_blank" href="#">hesujian</a>
</div> </body>
<script src="/static/js/jquery.min.js"></script>
<script src="/static/js/index.js"></script>
<script type="text/javascript" src="/static/js/jq_button.js"></script>
<script type="text/javascript" src="/static/js/xs.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$(".xs_li_13").xs999(13);
});
</script>
<script>
function del() {
let res = window.confirm("确认删除?");
if (res == false) {
return false;
}; }
</script> </html>

html页面

后端路由管理并处理页面

def classes(request):
# 生成一个操作数据库
sq = Classes()
classes = sq.select_all()
# 返回一个页面(html与数据库融合过后的)
return render(request,"classes.html",{"classes":classes}) def add_classes(request):
if request.method == 'GET':
# 如果请求方式是GET,那么说明是第一次按下添加操作
# 返回一个新的静态页面让他去做添加操作
return render(request,"add_class.html")
else:
# 如果请求方式是POST,那么说明是写好数据提交上来的
classname = request.POST.get("classname") sq = Classes()
sq.add_data(classname)
# 返回的是一个重定向的页面
return redirect("/classes/") def delete_classes(request):
id = request.GET.get("id")
sq = Classes()
sq.delete_data(id)
return redirect('/classes/') def update_classes(request):
sq = Classes()
if request.method == 'GET':
id = request.GET.get("id")
classes = sq.select_one(id)
return render(request,'update_class.html',{'class':classes})
else:
id = request.POST.get("id")
classname = request.POST.get("classname")
sq.update_data(id,classname)
return redirect('/classes/') # 写好路由关系映射
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^classes',classes),
url(r'^add_classes',add_classes),
url(r'^delete_classes', delete_classes),
url(r'^update_classes', update_classes), ]

后端页面代码

模态对话框

主要通过ajax与后台进行信息之间的交互,保证页面不进行刷新

通过给特定标签绑定click事件,在事件中通过jq对象对页面进行一些简单的修改以及与后台的数据交互

ajax参数

$.ajax({
type: 'post', //向后台提交数据的方式
url: "/model_add_classes/", //提交给后台的url,因为这里是本站跳转,直接写uri就可以
data: {"classname": $('.classname').val()},
//data是向后台提交的数据,用字典的方式传送,后台通过key进行取值
//success是后台成功返回信息的情况,对应函数里的参数就是后台发送的数据
success: function (data) {
if (data == 'ok') {
//刷新页面通过 window.location.href = '/model_classes';
window.location.href = '/model_classes';
} else {
$('.tips').text("用户名不能为空");
{#console.log(data);#}
}
;
},
});

后台与ajax对应的代码

def model_classes(request):
sq = Classes()
classes = sq.select_all()
# 正常访问页面还是通过render渲染一个页面回去
return render(request, "model_classes.html", {"classes": classes}) def model_add_classes(request):
# 前台通过ajax传过来的数据返回的是文本,通过 HttpResponse("ok")
classname = request.POST.get("classname")
if classname:
sq = Classes()
sq.add_data(classname)
return HttpResponse("ok")
else:
return HttpResponse("notok") def check_classes(request):
id = request.POST.get("id")
sq = Classes()
classes = sq.select_one(id)
return HttpResponse(classes['name']) def model_update_classes(request):
id = request.POST.get("id")
classname = request.POST.get("classname")
sq = Classes()
sq.update_data(id,classname)
return HttpResponse("ok") urlpatterns = [
url(r'^model_classes',model_classes),
url(r'^model_add_classes',model_add_classes),
url(r'^check_classes',check_classes),
url(r'^model_update_classes',model_update_classes)]

后台代码

django-两种方式对单表的操作的更多相关文章

  1. Django中ORM简介与单表数据操作

    一. ORM简介  概念:.ORM框架是用于实现面向对象编程语言种不同类型系统的数据之间的转换 构建模型的步骤:重点 (1).配置目标数据库信息,在seting.py中设置数据库信息 DATABASE ...

  2. ASP.NET Core 1.0中实现文件上传的两种方式(提交表单和采用AJAX)

    Bipin Joshi (http://www.binaryintellect.net/articles/f1cee257-378a-42c1-9f2f-075a3aed1d98.aspx) Uplo ...

  3. Groovy获取Bean两种方式(奇淫技巧操作)

    前言:请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 背景: 在Java代码中当我们需要一个Bean对象,通常会使用spring中@Autowired注解,用来自动装配对象. 在Groovy ...

  4. Python与数据库[2] -> 关系对象映射/ORM[2] -> 建立声明层表对象的两种方式

    建立声明层表对象的两种方式 在对表对象进行建立的时候,通常有两种方式可以完成,以下是两种方式的建立过程对比 首先导入需要的模块,获取一个声明层 from sqlalchemy.sql.schema i ...

  5. Python与数据库 sqlalchemy 建立声明层表对象的两种方式

    在对表对象进行建立的时候,通常有两种方式可以完成,以下是两种方式的建立过程对比 首先导入需要的模块,获取一个声明层 1 from sqlalchemy.sql.schema import Table, ...

  6. JAVA实现两种方法反转单列表

    /** * @author luochengcheng * 定义一个单链表 */ class Node { //变量 private int record; //指向下一个对象 private Nod ...

  7. Hadoop之HDFS文件操作常有两种方式(转载)

    摘要:Hadoop之HDFS文件操作常有两种方式,命令行方式和JavaAPI方式.本文介绍如何利用这两种方式对HDFS文件进行操作. 关键词:HDFS文件    命令行     Java API HD ...

  8. JavaWeb后台从input表单获取文本值的两种方式

    JavaWeb后台从input表单获取文本值的两种方式 #### index.html <!DOCTYPE html> <html lang="en"> & ...

  9. Django学习——ajax发送其他请求、上传文件(ajax和form两种方式)、ajax上传json格式、 Django内置序列化(了解)、分页器的使用

    1 ajax发送其他请求 1 写在form表单 submit和button会触发提交 <form action=""> </form> 注释 2 使用inp ...

随机推荐

  1. java说明文档制作

    A:对工具类加入文档注释 B:通过javadoc命令生成说明书 * @author(提取作者内容) * @version(提取版本内容) * javadoc -d 指定的文件目录 -author -v ...

  2. 算法习题---3.01猜数字游戏提示(UVa340)

    一.题目 实现一个经典“猜数字”游戏.给定答案序列和用户猜的序列,统计有多少数字位置正确(A),有多少数字在两个序列都出现过但位置不对(B). 输入包含多组数据.每组输入第一行为序列长度n,第二行是答 ...

  3. [AI] 深度数学 - Bayes

    数学似宇宙,韭菜只关心其中实用的部分. scikit-learn (sklearn) 官方文档中文版 scikit-learn Machine Learning in Python 一个新颖的onli ...

  4. 浅出讲解:php的socket通信

    原文地址:https://www.cnblogs.com/aipiaoborensheng/p/6708963.html 对TCP/IP.UDP.Socket编程这些词你不会很陌生吧?随着网络技术的发 ...

  5. Egret入门学习日记 --- 第十五篇(书中 6.1~6.9节 内容)

    第十五篇(书中 6.1~6.9节 内容) 好的,昨天完成了第五章. 今天来看第六章. 总结重点: 1.如何对组件进行分组? 跟着做: 重点1:如何对组件进行分组? 首先,选中你想要组合的组件. 然后点 ...

  6. OWASP TOP 10(OWASP十大应用安全风险)

    TOP1-注入 当不受信任的数据作为命令或查询的一部分发送到解释器时,会发生注入漏洞,例如SQL,NoSQL,OS,LDAP注入(轻量目录访问协议),xpath(XPath即为XML路径语言,它是一种 ...

  7. 用Inno setup制作以管理员权限启动的安装包

    inno setup制作的安装包,默认是不需要管理员权限启动的.我们制作安装包,往往需要做一些设置工作,这些设置工作可能用到管理员权限.使用Resource Hacker修改inno setup资源, ...

  8. 最新 拉卡拉java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.拉卡拉等10家互联网公司的校招Offer,因为某些自身原因最终选择了拉卡拉.6.7月主要是做系统复习.项目复盘.LeetCo ...

  9. CenOS 7 安装Redis

    1.Redis介绍 Redis是一个使用ANSI C编写的开源.支持网络.基于内存.可选持久性的键值对存储数据库.从2015年6月开始,Redis的开发由Redis Labs赞助,而2013年5月至2 ...

  10. selenium 获取不了标签文本的解决方法

    selenium 获取不了标签文本的解决方法 ------ 即driver.find_element_by_xxx().text() 为空的解决办法 如果得到的文本只为空,而非我们期望的baidu,那 ...