django-两种方式对单表的操作
单表操作的内容
我们这里对数据库单表的操作包含增删改查四部分
具体链接数据库的方式我们是通过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-两种方式对单表的操作的更多相关文章
- Django中ORM简介与单表数据操作
一. ORM简介 概念:.ORM框架是用于实现面向对象编程语言种不同类型系统的数据之间的转换 构建模型的步骤:重点 (1).配置目标数据库信息,在seting.py中设置数据库信息 DATABASE ...
- ASP.NET Core 1.0中实现文件上传的两种方式(提交表单和采用AJAX)
Bipin Joshi (http://www.binaryintellect.net/articles/f1cee257-378a-42c1-9f2f-075a3aed1d98.aspx) Uplo ...
- Groovy获取Bean两种方式(奇淫技巧操作)
前言:请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 背景: 在Java代码中当我们需要一个Bean对象,通常会使用spring中@Autowired注解,用来自动装配对象. 在Groovy ...
- Python与数据库[2] -> 关系对象映射/ORM[2] -> 建立声明层表对象的两种方式
建立声明层表对象的两种方式 在对表对象进行建立的时候,通常有两种方式可以完成,以下是两种方式的建立过程对比 首先导入需要的模块,获取一个声明层 from sqlalchemy.sql.schema i ...
- Python与数据库 sqlalchemy 建立声明层表对象的两种方式
在对表对象进行建立的时候,通常有两种方式可以完成,以下是两种方式的建立过程对比 首先导入需要的模块,获取一个声明层 1 from sqlalchemy.sql.schema import Table, ...
- JAVA实现两种方法反转单列表
/** * @author luochengcheng * 定义一个单链表 */ class Node { //变量 private int record; //指向下一个对象 private Nod ...
- Hadoop之HDFS文件操作常有两种方式(转载)
摘要:Hadoop之HDFS文件操作常有两种方式,命令行方式和JavaAPI方式.本文介绍如何利用这两种方式对HDFS文件进行操作. 关键词:HDFS文件 命令行 Java API HD ...
- JavaWeb后台从input表单获取文本值的两种方式
JavaWeb后台从input表单获取文本值的两种方式 #### index.html <!DOCTYPE html> <html lang="en"> & ...
- Django学习——ajax发送其他请求、上传文件(ajax和form两种方式)、ajax上传json格式、 Django内置序列化(了解)、分页器的使用
1 ajax发送其他请求 1 写在form表单 submit和button会触发提交 <form action=""> </form> 注释 2 使用inp ...
随机推荐
- 阶段5 3.微服务项目【学成在线】_day18 用户授权_04-方法授权-方法授权实现
2.3 方法授权实现 2.3.1资源服务添加授权控制 1.要想在资源服务使用方法授权,首先在资源服务配置授权控制 1)添加spring-cloud-starter-oauth2依赖. 2)拷贝授权配置 ...
- LeetCode_136. Single Number
136. Single Number Easy Given a non-empty array of integers, every element appears twice except for ...
- jenkins的pipeline拉取指定分支的代码
脚本示例 pipeline { agent any options { durabilityHint 'PERFORMANCE_OPTIMIZED' timeout(time:5, unit: 'MI ...
- 如何区分浏览器发起的是基于http/1.x还是http/2的请求?
前言 随着2015年http2.0被推出以来,主流的现代浏览器大多都开始慢慢去实现这个协议,那么如果查看自己的浏览器是否支持发送http2.0的请求,或者如何查看浏览器发送的请求是基于哪一个 ...
- 【VS开发】【C++开发】正确使用auto_ptr智能指针
1, auto_ptr类 auto_ptr是一个模板类,定义如下: template <typename Type>class auto_ptr {...}: 它存储的是一个指向Type的 ...
- 第一章:mysql的介绍与安装
什么是数据库管理系统 1)管理数据(增删改查) 2)存储数据 数据库管理系统的分类 1)关系型数据库(rdbms) 典型产品:mysql,oracle,mariadb,mssql(sqlserver) ...
- CentOS使用yum安装jdk
1.查看系统版本命令 cat /etc/issue 2.查看yum包含的jdk版本 yum search java 或者 yum list java* 版本 jre jdk 1.8 java-1.8. ...
- 说一说Unsafe魔法类
这篇算是对 Unsafe 的一个总体概况,由于内容实在太多,后续会分开几篇文章对里面内容展开细讲 前言 Unsafe可以说是java的后门,类似西游记中的如来佛祖法力无边,Unsafe主要提供一些用于 ...
- 数据结构 -- 链表(LinkedList)
链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成. 每个结点包括两个部分 ...
- C++中const关键字用法总结
看完了c++ primer的基础篇,对const还是有点陌生,在这里小小地总结一下吧. 1) const与变量 在变量的定义前加上 const 修饰符即可完成const对象的创建. const int ...