Django--jQuery 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路径注意顺序

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" type="text/css" href="/static/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="/static/themes/icon.css">

    <script type="text/javascript" src="/static/jquery.min.js"></script>
    <script type="text/javascript" src="/static/jquery.easyui.min.js"></script>
</head>
<body class="easyui-layout">
    <div data-options="region:'north',title:'North Title',split:true" style="height:100px;"></div>
    <div data-options="region:'south',title:'South Title',split:true" style="height:100px;"></div>
    <div data-options="region:'east',iconCls:'icon-reload',title:'East',split:true" style="width:100px;"></div>
    <div data-options="region:'west',title:'West',split:true" style="width:100px;"></div>
    <div data-options="region:'center',title:'center title'" style="padding:5px;background:#eee;"></div>
</body>
</html>

写入index函数

from django.shortcuts import render

# Create your views here.
def index(request):
    return render(request,'manager.html')

写入总路径

from django.contrib import admin
from django.urls import path
from wd_user.views import index

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', index),


]

配置静态资源路径

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

区域面板属性

属性名属性值类型描述默认值
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

创建数据库表模板

from django.db import models

# Create your models here.
class Category(models.Model):
    #类别模型
    name=models.CharField(max_length=10,null=False)
    parent=models.ForeignKey('Category',on_delete=None,null=True)
class Produce(models.Model):
    #产品
    name=models.CharField(max_length=20)
    price=models.FloatField()
    create_date=models.DateTimeField()
    category=models.ForeignKey('Category',on_delete=None,null=True)

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

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

修改html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" type="text/css" href="/static/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="/static/themes/icon.css">

    <script type="text/javascript" src="/static/jquery.min.js"></script>
    <script type="text/javascript" src="/static/jquery.easyui.min.js"></script>
    <script type="text/javascript">
        $(function(){
            //创建一个树状菜单
            $('#tt').tree({
                url:'catetree'
            });
        })
    </script>
</head>

<body class="easyui-layout">
    <div data-options="region:'north',title:'',split:true,collapsible:false" style="height:100px;">
        <h1 STYLE="text-align: center">欢迎访问jQuery easyUI</h1>
    </div>
    <div data-options="region:'west',title:'West',split:true" style="width:100px;">
        <ul id="tt">

        </ul>
    </div>
    <div data-options="region:'center',title:'center title'" style="padding:5px;background:#eee;"></div>
</body>

</html>

填写树状函数

from django.http import HttpResponse
from django.shortcuts import render

# Create your views here.
from django.views.decorators.csrf import csrf_exempt
import json

from wd_user.models import Category


def index(request):
    return render(request,'manager.html')
#获取类别表  组装成一个tree结构
@csrf_exempt
def catetree(request):
    #每次请求都是某一个类别下的分类
    tree=[]
    #获取请求id,如果没有默认为none
    id=request.POST.get('id',None)
    #查询
    #查询所有parent_id等于父集id的所有产品
    category=Category.objects.filter(parent_id=id).all()
    for cate in category:
        #每一个类别都是一个字典
        ca={}
        ca['id']=cate.id
        ca['text']=cate.name
        ca['state']='closed'
        tree.append(ca)
    #将返回数据改成json格式
    return HttpResponse(json.dumps(tree))

填写路径urls.py

进入浏览器效果显示

2.获取各类名下的产品

更改html

添加函数

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

配置路径

from django.contrib import admin
from django.urls import path
from wd_user.views import *

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', index),
    path('catetree',catetree),
    path('ProduceList',ProduceList)

]

浏览器效果

二、分页

1.全部产品分页

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

更改html

更改函数


from django.core.paginator import  Paginator
@csrf_exempt
def ProduceList(request):
    page=request.POST.get('page',1)#默认第一页
    rows=request.POST.get('rows',10)#默认每页十条
    #请求获取某个类别下的所有产品
    proSet=Produce.objects.all().order_by()
    #1创建一个分页器 1被分页的集合 2每页多少条数据
    paginator=Paginator(proSet,rows)
    #2.获取第几页的数据
    pages=paginator.get_page(page)

    tree=[]
    #返回值中必须有total(总页数) rows(当前页的数据集)
    for pro in pages:
        p={}
        p['id']=pro.id
        p['name']=pro.name
        p['price']=pro.price
        p['create_date']=pro.create_date.strftime('%Y-%m-%d')
        tree.append(p)
    grid = {'total': paginator.count,
            'rows':tree}
    return HttpResponse(json.dumps(grid))

实现效果

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

更改html

更改函数

效果展示

三、排序

 

sortparam

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

代码示例:

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

 

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

让价格和名字可以排序

更改html

更改函数

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

四、按钮

 

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

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

 

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

通过数组定义工具栏:

$('#dg').datagrid({
	toolbar: [{
		iconCls: 'icon-edit',
		handler: function(){alert('编辑按钮')}
	},'-',{
		iconCls: 'icon-help',
		handler: function(){alert('帮助按钮')}
	}]
});

更改html下的datagrid

添加按钮

五、form表单

点击添加出现窗口

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

data函数

pid

eval

success

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" type="text/css" href="/static/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="/static/themes/icon.css">

    <script type="text/javascript" src="/static/jquery.min.js"></script>
    <script type="text/javascript" src="/static/jquery.easyui.min.js"></script>
    <script type="text/javascript">
        $(function(){
            //创建一个树状菜单
            $('#tt').tree({
                url:'catetree',
                onClick:function(node){
                    //点击后重新加载构造datagrid
                    $('#dg').datagrid({
                        queryParams:{
                            'category_id':node.id
                        }
                    })

                }
                });
            $('#dg').datagrid({
                url:'ProduceList',
                //确认启动分页
                pagination:true,
                //分页单
                pageList:[5,10,15],
                columns:[[
                        {field:'id',title:'编号',width:100},
                        {field:'name',title:'名字',width:100,sortable:true},
                        {field:'price',title:'价格',width:100,align:'right',sortable:true}  ,
                        {field:'create_date',title:'发布时间',width:100,align:'right'}
                    ]],
                toolbar: [
                    {
                        iconCls: 'icon-add',
                        text:'添加',
                        handler: function(){
                            var node=$("#tt").tree("getSelected");
                            if(node){
                                //取消异步请求
{#                                $.ajaxSetup({#}
{#                                    async:false#}
{#                                });#}
                                $('#Category').combotree("tree").tree({
                                    onLoadSuccess:function(node,date){
                                        $('#Category').combotree("tree").tree("expandAll")
                                    }
                                });
                                //开启异步请求
{#                                $.ajaxSetup({#}
{#                                    async:true#}
{#                                });#}
                                //将选中的类别的ID绑定到下拉列表中
                                $('#ff').form("load",{"categoryid":node.id})
                            }
                            $('#newPro').dialog('open');
                        }
                    },'-',{
                        iconCls: 'icon-edit',
                        text:'编辑',
                        handler: function(){}
                    },'-',{
                        iconCls: 'icon-help',
                        text:'帮助',
                        handler: function(){}
                    },'-',{
                        iconCls: 'icon-remove',
                        text:'删除',
                        handler: function(){
                            var row=$('#dg').datagrid("getSelected");
                            //alert(row.id);
                            $.get('delete','pid='+row.id,function (data) {
                                data=eval('('+data+')');
                            $.messager.show({
                                 msg:data.msg
                            });
                            $('#dg').datagrid('reload')

                            })
                        }
                    }],
                //只能选中一行
                singleSelect:true
            });
            //窗口设置
            $('#newPro').dialog({
                title: '添加产品',
                width: 400,
                height: 200,
                closed: true,
                cache: false,
                modal: true,
                //为窗口添加保存和取消按钮
                buttons:[
                    {
                        text:'保存',
                        iconCls:'icon-save',
                        handler:function(){
                            $('#ff').submit();//执行submit事件
                            $('#dg').datagrid("reload")//重载表单dg

                        }
                    },{
                        text:'取消',
                        iconCls:'icon-cancel',
                        handler:function(){
                           $('#newPro').window('close')
                    }}]
                });
            //定义下拉列表框在什么时候加载
            $('#Category').combotree({
                url: '/catetree',
                required: true
            });
            $('#ff').form({
                url:'addProduce',
                success:function (add) {
                      add=eval('('+add+')');
                      $.messager.show({
                         title:'商品保存信息',
                        msg:add.msg,
                        timeout:5000,
                        showType:'slide'
                    })
                }
            })
        });
        //设置时间格式
        function myformatter(date){
            var y=date.getFullYear();
            var m=date.getMonth()+1;
            var d=date.getDate();
            var h=date.getHours();
            var M=date.getMinutes();
            var s=date.getSeconds();
            return y+'-'+(m<10?('0'+m):m)+'-'+
                (d<10?('0'+d):d)+' '+h+':'+M+':'+s;
        }

    </script>
</head>

<body class="easyui-layout">
    <div data-options="region:'north',title:'',split:true,collapsible:false" style="height:100px;">
        <h1 STYLE="text-align: center">欢迎访问jQuery easyUI</h1>
    </div>
    <div data-options="region:'west',title:'菜单',split:true" style="width:100px;">
        <ul id="tt">

        </ul>
    </div>
    <div data-options="region:'center',title:'产品列表'" style="padding:5px;background:#eee;">
        <table id="dg"></table>
    </div>
    <div id="newPro">
        <form id="ff" method="post" action="/addProduce">
            <div>
                <label for="name">产品名称:</label>
                <input class="easyui-validatebox" type="text" name="name" data-options="required:true" />
            </div>
            <div>
                <label >价格:</label>
                <input name="price" type="text" class="easyui-numberbox" value="100" data-options="min:0,precision:2"></input>
            </div>
            <div>
                <label >类别:</label>
                <select name="cata" id="Category" class="easyui-combotree" style="width:200px;"data-options="required:true"></select>
            </div>
            <div>
                <label>发布时间:</label>
                <input name="createDate" class="easyui-datetimebox" data-options="formatter:myformatter ,required:true,showSeconds:false" style="width:150px">
            </div>
        </form>
    </div>
</body>

</html>
import datetime

from django.http import HttpResponse
from django.shortcuts import render
from django.core.paginator import  Paginator
# Create your views here.
from django.views.decorators.csrf import csrf_exempt
import json

from wd_user.models import Category, Produce


def index(request):
    return render(request,'manager.html')
#获取类别表  组装成一个tree结构
@csrf_exempt
def catetree(request):
    #每次请求都是某一个类别下的分类
    tree=[]
    #获取请求id,如果没有默认为none
    id=request.POST.get('id',None)
    #查询
    #查询所有parent_id等于父集id的所有产品
    category=Category.objects.filter(parent_id=id).all()
    for cate in category:
        #每一个类别都是一个字典
        ca={}
        ca['id']=cate.id
        ca['text']=cate.name
        ca['state']='closed'
        tree.append(ca)
    #将返回数据改成json格式
    return HttpResponse(json.dumps(tree))
@csrf_exempt
def ProduceList(request):
    cate_id = request.POST.get('category_id', None)

    #获取排序的列和排序方式
    sort=request.POST.get('sort', 'id')#排序的列默认是id
    order=request.POST.get('order', 'asc')

    page=request.POST.get('page',1)#默认第一页
    rows=request.POST.get('rows',10)#默认每页十条
    proSet=Produce.objects.all()

    if cate_id is not None:
        proSet=proSet.filter(category_id=cate_id)
    if order != 'asc':
        sort='-'+sort
    proSet=proSet.order_by(sort)
    paginator=Paginator(proSet,rows)

    pages=paginator.get_page(page)
    tree=[]
    #返回值中必须有total(总页数) rows(当前页的数据集)
    for pro in pages:
        p={}
        p['id']=pro.id
        p['name']=pro.name
        p['price']=pro.price
        p['create_date']=pro.create_date.strftime('%Y-%m-%d')
        tree.append(p)
    grid = {'total': paginator.count,
            'rows':tree}
    return HttpResponse(json.dumps(grid))
@csrf_exempt
def addProduce(request):
    name=request.POST.get('name')
    price=request.POST.get('price')
    category=request.POST.get('cata')
    create_date=request.POST.get('createDate')
    pro=Produce()
    pro.name =name
    pro. price=price
    pro. category_id=category
    pro.create_date =create_date
    pro.save()
    data={'msg':'保存成功','state':'true'}
    return HttpResponse(json.dumps(data))
@csrf_exempt
def delete(request):
    pid=request.GET.get('pid')
    Produce.objects.filter(pk=pid).delete()
    data={'msg':'删除成功'}
    return HttpResponse(json.dumps(data))

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值