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 ...
随机推荐
- spark "main" java.lang.ArrayIndexOutOfBoundsException: 10582
升级 你的 paranamer 到2.8 ,这是由于你的jdk版本1.8导致 <!-- https://mvnrepository.com/artifact/com.thoughtworks.p ...
- vue等单页面应用及其优缺点
优点: Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件,核心是一个响应的数据绑定系统.MVVM.数据驱动.组件化.轻量.简洁.高效.快速.模块友好. 缺点: 不支持低版本 ...
- react 做的简易todolist
首先要有一定的react的基础,里面的一些不做解释(包括项目文件的用法及作用) ### 1. 先安装react的插件 npm install create-react-app -g ...
- leetcode1186 Maximum Subarray Sum with One Deletion
思路: 最大子段和的变体,前后两个方向分别扫一遍即可. 实现: class Solution { public: int maximumSum(vector<int>& arr) ...
- 【数据库开发】在Windows上利用C++开发MySQL的初步
[数据库开发]在Windows上利用C++开发MySQL的初步 标签(空格分隔): [编程开发] Windows上在上面配置环境的基础上开展一个小demo链接数据库,没想到中间也出现了这么多的问题,简 ...
- Andrew Ng机器学习课程16
Andrew Ng机器学习课程16 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:主要介绍了ICA算法,并利用最大似然估计和随机梯度上升算法进行求解, ...
- CenOS 7 防火墙 端口 systemctl 操作项
Centos开放端口 # firewall-cmd --zone=public --add-port=3306/tcp --permanent Centos关闭端口 # firewall-cmd -- ...
- 《Tsinghua os mooc》第21~22讲 文件系统
第二十一讲 文件系统 文件系统是操作系统中管理持久性数据的子系统,提供数据存储和访问功能. 组织.检索.读写访问数据 大多数计算机系统都有文件系统 Google 也是一个文件系统 文件是具有符号名,由 ...
- Jmeter进行接口流程测试
Jmeter进行简单的流程测试 此次完成的流程:添加文章-删除文章 总的如下: 一.测试计划 用户定义的变量中,我定义了3个变量: 二.HTTP cookie管理器 填写要添加的cookie 三.JD ...
- setting中executable for debug session对话框