当前位置:   article > 正文

Django--jQuery easyUI_django+query easyui

django+query easyui

 一、jQuery easyUI

jQuery easyUI是建立在jQuery javaScript库上的一组用户界面交互、特效、小部件及主题.无论您是在创建高度交互的Web应用程序还是仅仅想窗口控制添加一个日期选择器,jQuery easyUI 都是一个完美的选择

1创建新的项目,导入静态资源,更改setting设置

下载下来的jQuery easyUI包找到所选文件导入静态资源static包中

2.创建新的manager.html页面 配置路径,写入函数

先找到jQuery easyUI说明文件夹如下(jquery-easyui-EDT-1.4.2-build1---->jquery-easyui-1.4.2--->docs(千万别点我)--->jQuery EasyUI 1.4.2 版 API 中文版 (Made By Richie696).chm)

将所框出的代码写入html页面并修改script路径注意顺序

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <link rel="stylesheet" type="text/css" href="/static/themes/default/easyui.css">
  7. <link rel="stylesheet" type="text/css" href="/static/themes/icon.css">
  8. <script type="text/javascript" src="/static/jquery.min.js"></script>
  9. <script type="text/javascript" src="/static/jquery.easyui.min.js"></script>
  10. </head>
  11. <body class="easyui-layout">
  12. <div data-options="region:'north',title:'North Title',split:true" style="height:100px;"></div>
  13. <div data-options="region:'south',title:'South Title',split:true" style="height:100px;"></div>
  14. <div data-options="region:'east',iconCls:'icon-reload',title:'East',split:true" style="width:100px;"></div>
  15. <div data-options="region:'west',title:'West',split:true" style="width:100px;"></div>
  16. <div data-options="region:'center',title:'center title'" style="padding:5px;background:#eee;"></div>
  17. </body>
  18. </html>

写入index函数

  1. from django.shortcuts import render
  2. # Create your views here.
  3. def index(request):
  4. return render(request,'manager.html')

写入总路径

  1. from django.contrib import admin
  2. from django.urls import path
  3. from wd_user.views import index
  4. urlpatterns = [
  5. path('admin/', admin.site.urls),
  6. path('', index),
  7. ]

配置静态资源路径

进入浏览器后显示效果展示

区域面板属性

属性名属性值类型描述默认值
titlestring布局面板标题文本。null
regionstring定义布局面板位置,可用的值有:north, south, east, west, center。 
borderboolean为true时显示布局面板边框。true
splitboolean为true时用户可以通过分割栏改变面板大小。false
iconClsstring一个包含图标的CSS类ID,该图标将会显示到面板标题上。null
hrefstring用于读取远程站点数据的URL链接null
collapsibleboolean定义是否显示折叠按钮。(该属性自1.3.3版开始可用)true
minWidthnumber最小面板宽度。(该属性自1.3.3版开始可用)10
minHeightnumber最小面板高度。(该属性自1.3.3版开始可用)10
maxWidthnumber最大面板宽度。(该属性自1.3.3版开始可用)10000
maxHeightnumber最大面板高度。(该属性自1.3.3版开始可用)10000

创建数据库表模板

  1. from django.db import models
  2. # Create your models here.
  3. class Category(models.Model):
  4. #类别模型
  5. name=models.CharField(max_length=10,null=False)
  6. parent=models.ForeignKey('Category',on_delete=None,null=True)
  7. class Produce(models.Model):
  8. #产品
  9. name=models.CharField(max_length=20)
  10. price=models.FloatField()
  11. create_date=models.DateTimeField()
  12. category=models.ForeignKey('Category',on_delete=None,null=True)

执行shell命令创建表然后在表中添加数据

接下来为页面嘴边创建一个树状菜单

修改html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <link rel="stylesheet" type="text/css" href="/static/themes/default/easyui.css">
  7. <link rel="stylesheet" type="text/css" href="/static/themes/icon.css">
  8. <script type="text/javascript" src="/static/jquery.min.js"></script>
  9. <script type="text/javascript" src="/static/jquery.easyui.min.js"></script>
  10. <script type="text/javascript">
  11. $(function(){
  12. //创建一个树状菜单
  13. $('#tt').tree({
  14. url:'catetree'
  15. });
  16. })
  17. </script>
  18. </head>
  19. <body class="easyui-layout">
  20. <div data-options="region:'north',title:'',split:true,collapsible:false" style="height:100px;">
  21. <h1 STYLE="text-align: center">欢迎访问jQuery easyUI</h1>
  22. </div>
  23. <div data-options="region:'west',title:'West',split:true" style="width:100px;">
  24. <ul id="tt">
  25. </ul>
  26. </div>
  27. <div data-options="region:'center',title:'center title'" style="padding:5px;background:#eee;"></div>
  28. </body>
  29. </html>

填写树状函数

  1. from django.http import HttpResponse
  2. from django.shortcuts import render
  3. # Create your views here.
  4. from django.views.decorators.csrf import csrf_exempt
  5. import json
  6. from wd_user.models import Category
  7. def index(request):
  8. return render(request,'manager.html')
  9. #获取类别表 组装成一个tree结构
  10. @csrf_exempt
  11. def catetree(request):
  12. #每次请求都是某一个类别下的分类
  13. tree=[]
  14. #获取请求id,如果没有默认为none
  15. id=request.POST.get('id',None)
  16. #查询
  17. #查询所有parent_id等于父集id的所有产品
  18. category=Category.objects.filter(parent_id=id).all()
  19. for cate in category:
  20. #每一个类别都是一个字典
  21. ca={}
  22. ca['id']=cate.id
  23. ca['text']=cate.name
  24. ca['state']='closed'
  25. tree.append(ca)
  26. #将返回数据改成json格式
  27. return HttpResponse(json.dumps(tree))

填写路径urls.py

进入浏览器效果显示

2.获取各类名下的产品

更改html

添加函数

  1. from wd_user.models import Category, Produce
  2. @csrf_exempt
  3. def ProduceList(request):
  4. #请求获取某个类别下的所有产品
  5. proSet=Produce.objects.all()
  6. tree=[]
  7. for pro in proSet:
  8. p={}
  9. p['id']=pro.id
  10. p['name']=pro.name
  11. p['price']=pro.price
  12. p['create_date']=pro.create_date.strftime('%Y-%m-%d')
  13. tree.append(p)
  14. return HttpResponse(json.dumps(tree))

配置路径

  1. from django.contrib import admin
  2. from django.urls import path
  3. from wd_user.views import *
  4. urlpatterns = [
  5. path('admin/', admin.site.urls),
  6. path('', index),
  7. path('catetree',catetree),
  8. path('ProduceList',ProduceList)
  9. ]

浏览器效果

二、分页

1.全部产品分页

步骤:<1>获取第几页多少条   <2>做分页    <3>获取第几页 <4>设置一个total 和rows

更改html

更改函数

  1. from django.core.paginator import Paginator
  2. @csrf_exempt
  3. def ProduceList(request):
  4. page=request.POST.get('page',1)#默认第一页
  5. rows=request.POST.get('rows',10)#默认每页十条
  6. #请求获取某个类别下的所有产品
  7. proSet=Produce.objects.all().order_by()
  8. #1创建一个分页器 1被分页的集合 2每页多少条数据
  9. paginator=Paginator(proSet,rows)
  10. #2.获取第几页的数据
  11. pages=paginator.get_page(page)
  12. tree=[]
  13. #返回值中必须有total(总页数) rows(当前页的数据集)
  14. for pro in pages:
  15. p={}
  16. p['id']=pro.id
  17. p['name']=pro.name
  18. p['price']=pro.price
  19. p['create_date']=pro.create_date.strftime('%Y-%m-%d')
  20. tree.append(p)
  21. grid = {'total': paginator.count,
  22. 'rows':tree}
  23. return HttpResponse(json.dumps(grid))

实现效果

2.添加点击事件出来相应的产品

更改html

更改函数

效果展示

三、排序

 

sortparam

排序datagrid表格。(该方法自1.3.6版开始可用)

代码示例:

  1. $('#dg').datagrid('sort', 'itemid');    // 排序一个列
  2. $('#dg').datagrid('sort', {         // 指定了排序顺序的列
  3. sortName: 'productid',
  4. sortOrder: 'desc'
  5. });

 

sortableboolean如果为true,则允许列使用排序。

让价格和名字可以排序

更改html

更改函数

实现效果 点击价格 名字 即可排序

四、按钮

 

toolbararray,selector顶部工具栏的DataGrid面板。可能的值:
1) 一个数组,每个工具属性都和linkbutton一样。
2) 选择器指定的工具栏。

在<div>标签上定义工具栏:

 

  1. $('#dg').datagrid({
  2. toolbar: '#tb'
  3. });
  4. <div id="tb">
  5. <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-edit',plain:true"/a>
  6. <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-help',plain:true"/a>
  7. </div>

通过数组定义工具栏:

  1. $('#dg').datagrid({
  2. toolbar: [{
  3. iconCls: 'icon-edit',
  4. handler: function(){alert('编辑按钮')}
  5. },'-',{
  6. iconCls: 'icon-help',
  7. handler: function(){alert('帮助按钮')}
  8. }]
  9. });

更改html下的datagrid

添加按钮

五、form表单

点击添加出现窗口

$().datagrid.('reload’)重载记录,跟'load'方法一样但是重载的是当前页的记录而非第一页。

data函数

pid

eval

success

 

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <link rel="stylesheet" type="text/css" href="/static/themes/default/easyui.css">
  7. <link rel="stylesheet" type="text/css" href="/static/themes/icon.css">
  8. <script type="text/javascript" src="/static/jquery.min.js"></script>
  9. <script type="text/javascript" src="/static/jquery.easyui.min.js"></script>
  10. <script type="text/javascript">
  11. $(function(){
  12. //创建一个树状菜单
  13. $('#tt').tree({
  14. url:'catetree',
  15. onClick:function(node){
  16. //点击后重新加载构造datagrid
  17. $('#dg').datagrid({
  18. queryParams:{
  19. 'category_id':node.id
  20. }
  21. })
  22. }
  23. });
  24. $('#dg').datagrid({
  25. url:'ProduceList',
  26. //确认启动分页
  27. pagination:true,
  28. //分页单
  29. pageList:[5,10,15],
  30. columns:[[
  31. {field:'id',title:'编号',width:100},
  32. {field:'name',title:'名字',width:100,sortable:true},
  33. {field:'price',title:'价格',width:100,align:'right',sortable:true} ,
  34. {field:'create_date',title:'发布时间',width:100,align:'right'}
  35. ]],
  36. toolbar: [
  37. {
  38. iconCls: 'icon-add',
  39. text:'添加',
  40. handler: function(){
  41. var node=$("#tt").tree("getSelected");
  42. if(node){
  43. //取消异步请求
  44. {# $.ajaxSetup({#}
  45. {# async:false#}
  46. {# });#}
  47. $('#Category').combotree("tree").tree({
  48. onLoadSuccess:function(node,date){
  49. $('#Category').combotree("tree").tree("expandAll")
  50. }
  51. });
  52. //开启异步请求
  53. {# $.ajaxSetup({#}
  54. {# async:true#}
  55. {# });#}
  56. //将选中的类别的ID绑定到下拉列表中
  57. $('#ff').form("load",{"categoryid":node.id})
  58. }
  59. $('#newPro').dialog('open');
  60. }
  61. },'-',{
  62. iconCls: 'icon-edit',
  63. text:'编辑',
  64. handler: function(){}
  65. },'-',{
  66. iconCls: 'icon-help',
  67. text:'帮助',
  68. handler: function(){}
  69. },'-',{
  70. iconCls: 'icon-remove',
  71. text:'删除',
  72. handler: function(){
  73. var row=$('#dg').datagrid("getSelected");
  74. //alert(row.id);
  75. $.get('delete','pid='+row.id,function (data) {
  76. data=eval('('+data+')');
  77. $.messager.show({
  78. msg:data.msg
  79. });
  80. $('#dg').datagrid('reload')
  81. })
  82. }
  83. }],
  84. //只能选中一行
  85. singleSelect:true
  86. });
  87. //窗口设置
  88. $('#newPro').dialog({
  89. title: '添加产品',
  90. width: 400,
  91. height: 200,
  92. closed: true,
  93. cache: false,
  94. modal: true,
  95. //为窗口添加保存和取消按钮
  96. buttons:[
  97. {
  98. text:'保存',
  99. iconCls:'icon-save',
  100. handler:function(){
  101. $('#ff').submit();//执行submit事件
  102. $('#dg').datagrid("reload")//重载表单dg
  103. }
  104. },{
  105. text:'取消',
  106. iconCls:'icon-cancel',
  107. handler:function(){
  108. $('#newPro').window('close')
  109. }}]
  110. });
  111. //定义下拉列表框在什么时候加载
  112. $('#Category').combotree({
  113. url: '/catetree',
  114. required: true
  115. });
  116. $('#ff').form({
  117. url:'addProduce',
  118. success:function (add) {
  119. add=eval('('+add+')');
  120. $.messager.show({
  121. title:'商品保存信息',
  122. msg:add.msg,
  123. timeout:5000,
  124. showType:'slide'
  125. })
  126. }
  127. })
  128. });
  129. //设置时间格式
  130. function myformatter(date){
  131. var y=date.getFullYear();
  132. var m=date.getMonth()+1;
  133. var d=date.getDate();
  134. var h=date.getHours();
  135. var M=date.getMinutes();
  136. var s=date.getSeconds();
  137. return y+'-'+(m<10?('0'+m):m)+'-'+
  138. (d<10?('0'+d):d)+' '+h+':'+M+':'+s;
  139. }
  140. </script>
  141. </head>
  142. <body class="easyui-layout">
  143. <div data-options="region:'north',title:'',split:true,collapsible:false" style="height:100px;">
  144. <h1 STYLE="text-align: center">欢迎访问jQuery easyUI</h1>
  145. </div>
  146. <div data-options="region:'west',title:'菜单',split:true" style="width:100px;">
  147. <ul id="tt">
  148. </ul>
  149. </div>
  150. <div data-options="region:'center',title:'产品列表'" style="padding:5px;background:#eee;">
  151. <table id="dg"></table>
  152. </div>
  153. <div id="newPro">
  154. <form id="ff" method="post" action="/addProduce">
  155. <div>
  156. <label for="name">产品名称:</label>
  157. <input class="easyui-validatebox" type="text" name="name" data-options="required:true" />
  158. </div>
  159. <div>
  160. <label >价格:</label>
  161. <input name="price" type="text" class="easyui-numberbox" value="100" data-options="min:0,precision:2"></input>
  162. </div>
  163. <div>
  164. <label >类别:</label>
  165. <select name="cata" id="Category" class="easyui-combotree" style="width:200px;"data-options="required:true"></select>
  166. </div>
  167. <div>
  168. <label>发布时间:</label>
  169. <input name="createDate" class="easyui-datetimebox" data-options="formatter:myformatter ,required:true,showSeconds:false" style="width:150px">
  170. </div>
  171. </form>
  172. </div>
  173. </body>
  174. </html>
  1. import datetime
  2. from django.http import HttpResponse
  3. from django.shortcuts import render
  4. from django.core.paginator import Paginator
  5. # Create your views here.
  6. from django.views.decorators.csrf import csrf_exempt
  7. import json
  8. from wd_user.models import Category, Produce
  9. def index(request):
  10. return render(request,'manager.html')
  11. #获取类别表 组装成一个tree结构
  12. @csrf_exempt
  13. def catetree(request):
  14. #每次请求都是某一个类别下的分类
  15. tree=[]
  16. #获取请求id,如果没有默认为none
  17. id=request.POST.get('id',None)
  18. #查询
  19. #查询所有parent_id等于父集id的所有产品
  20. category=Category.objects.filter(parent_id=id).all()
  21. for cate in category:
  22. #每一个类别都是一个字典
  23. ca={}
  24. ca['id']=cate.id
  25. ca['text']=cate.name
  26. ca['state']='closed'
  27. tree.append(ca)
  28. #将返回数据改成json格式
  29. return HttpResponse(json.dumps(tree))
  30. @csrf_exempt
  31. def ProduceList(request):
  32. cate_id = request.POST.get('category_id', None)
  33. #获取排序的列和排序方式
  34. sort=request.POST.get('sort', 'id')#排序的列默认是id
  35. order=request.POST.get('order', 'asc')
  36. page=request.POST.get('page',1)#默认第一页
  37. rows=request.POST.get('rows',10)#默认每页十条
  38. proSet=Produce.objects.all()
  39. if cate_id is not None:
  40. proSet=proSet.filter(category_id=cate_id)
  41. if order != 'asc':
  42. sort='-'+sort
  43. proSet=proSet.order_by(sort)
  44. paginator=Paginator(proSet,rows)
  45. pages=paginator.get_page(page)
  46. tree=[]
  47. #返回值中必须有total(总页数) rows(当前页的数据集)
  48. for pro in pages:
  49. p={}
  50. p['id']=pro.id
  51. p['name']=pro.name
  52. p['price']=pro.price
  53. p['create_date']=pro.create_date.strftime('%Y-%m-%d')
  54. tree.append(p)
  55. grid = {'total': paginator.count,
  56. 'rows':tree}
  57. return HttpResponse(json.dumps(grid))
  58. @csrf_exempt
  59. def addProduce(request):
  60. name=request.POST.get('name')
  61. price=request.POST.get('price')
  62. category=request.POST.get('cata')
  63. create_date=request.POST.get('createDate')
  64. pro=Produce()
  65. pro.name =name
  66. pro. price=price
  67. pro. category_id=category
  68. pro.create_date =create_date
  69. pro.save()
  70. data={'msg':'保存成功','state':'true'}
  71. return HttpResponse(json.dumps(data))
  72. @csrf_exempt
  73. def delete(request):
  74. pid=request.GET.get('pid')
  75. Produce.objects.filter(pk=pid).delete()
  76. data={'msg':'删除成功'}
  77. return HttpResponse(json.dumps(data))

 

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号