Django世界-迈出第七步-部分功能实现

联想输入法

Html:

$(function () {
            var search = $("#tester");
            var source = new Array();//[{"name":"zhangkun"},{"name":"dashen"}]//["aab","aac","bbd","bbn"];
            {#source = ["卢造发", "卢造发1", "卢造发2", "卢造发3", "卢造发4", "卢造发5"]#}
            search.keyup(function () {
                $.ajax({
                    type: "POST",
                    url: "{% url 'testManage:is-taskarrange-rearch' %}",
                    data: {search: $("#tester").val()},
                    success: function (data) {
                        {#var obj = eval(data); //将json转换为对象的方法#}
                        {#var obj = JSON.parse(data);       //转为JSON字符串#}
                        {#for (var i = 0; i < obj.length; i++) {#}
                        {#    console.log(obj[i])#}
                        {# }#}
                        {#for (var i = 0; i < obj.length; i++) {#}
                        {#    console.log('222', obj[i]);#}
                        {#    source[i] = obj[i].username;#}
                        {# }#}
                        {#source = ["卢造发", "卢造发1", "卢造发2", "卢造发3", "卢造发4", "卢造发5"];#}
                        //转为JSON字符串
                        var obj = JSON.stringify(data); 
                        source = data['username'];
                        search.autocomplete({
                            source: source,
                            messages: {  //message设置不出现匹配关键字的结果
                                noResults: '',
                                results: function () {
                                }
                            }
                        });


                    }
                });
            });
        });

Views:

class TaskArrangeRearchView(LoginRequiredMixin, View):
    '''联想记忆法 - 姓名'''

    def post(self, request):
        res = dict(result=False)
        uname = request.POST.get('search')
        if uname:
            user = list(UserProfile.objects.filter(name__contains=uname).values('name').distinct())

            user_name = [i['name'] for i in user]

            res['username'] = user_name
        return HttpResponse(json.dumps(res, cls=DjangoJSONEncoder), content_type='application/json')

二级联动

HTML:

//获取 Html tbody tr
  var numtr = $("tboby tr").length;//获得tboby 下的所有tr的个数,
  for (var i = 2; i < numtr; i++) {
         console.log(i)
        }


 /*专案阶段二级联动*/
$("select[name='fk_project']").change(function () {

      var fk_project_id = $("select[name='fk_project']").val();

      $.ajax({
          type: "POST",

          url: "{% url 'system:basic-project-stage' %}",

          data: {"fk_project_id": fk_project_id, csrfmiddlewaretoken: '{{ csrf_token }}'},

          success: function (data) {
              var fk_st = $("select[name='fk_stage']").empty();  //.append('<option value>'+'--请选择--'+'</option>');
              fk_st.append('<option></option>')
              $.each(data.stages, function (i, val) {
                  //console.log(i + "===" + val.id)  // #表示浏览器控制台下打印消息
                  fk_st.append('<option value="' + val.id + '">' + val.sname + '</option>')
              })

          }
      });


   });

Views:

class ProjectAndStageLinkageView(LoginRequiredMixin, View):

    def post(self, request):

        res = dict()

        if request.POST.get('fk_project_id'):
            stages = Stage.objects.filter(fk_project_id=request.POST.get('fk_project_id')).values(*['id','sname'])
            res['stages'] = list(stages)

        return HttpResponse(json.dumps(res, cls=DjangoJSONEncoder), content_type='application/json')

动态修改数据

*前端传过来的数据库 字段 是变量
*无法用  IpadDetails.objects.filer(id=id).update(field = new_value)


def editTableInfo(request):
    if request.method =='POST':
        try:
            editType = request.POST.get('editType', None)
            newValue = request.POST.get('newValue', None)
            obj = tableModel.objects.get(id=objId)
            result = dynamicUpdateObjFields(obj=obj, fieldName=editType,
                                            fieldValue=newValue)
            return HttpResponse(result)
        except Exception as e:
            print(e)
            return HttpResponse('网络出错!')

def dynamicUpdateObjFields(obj=None,fieldName=None,fieldValue=None):
    print obj,fieldName,fieldValue
    try:
        if obj and fieldName and fieldValue:
            setattr(obj,fieldName,fieldValue)
            obj.save()
            return '修改成功'
    except Exception as e:
        print e
    return '修改失败'

Excel 上传文件

Ajax:一定要加上
processData: false,
contentType: false,

Form: 一定要加上
enctype=“multipart/form-data”

//阻止表单自动提交
js - e.preventDefault()
form - οnsubmit=“return false”

HTML:


<form id="uploadForm" enctype="multipart/form-data">
    <input id="file" type="file" name="file"/>
    <button id="upload" type="button">upload</button>
</form>

Ajax:

var aform = new FormData();
var file = $('#file')[0].files[0];
aform.append('file', file);

$.ajax({
    url: '/upload',
    type: 'POST',
    cache: false, // 设置为false,上传文件不需要缓存。
    data: new FormData($('#uploadForm')[0]),
    processData: false, // data值是FormData对象,不需要对数据做处理
    contentType: false //是由<form>表单构造的FormData对象,且已经声明了属性enctype="multipart/form-data",所以这里设置为false。
}).done(function(res) {

}).fail(function(res) {
    
    });

页面刷新和关闭

layer.close(index) - 关闭特定层
layer.closeAll(type) - 关闭所有层

$(".layui-laypage-btn")[0].click(); -刷新页面

var page_ipad = $('#IpadList').DataTable();
page_ipad.ajax.reload();

bsgrid: gridObj.refreshPage();

HTMLdisplay()
display:none   提交的时候才显示 , 
需要更改 $('#btnSave').css('display','block')

Excel 操作

文件保存数据库中:

 name = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) +name +'.xlsx'
    f = open(os.path.join(BASE_DIR, 'static','wenjian',name), 'wb')

    f.write(output.getvalue())
    f.close()
    wj= Wenjian(name=name)
    wj.save()

下载Excel:

HTML:

<tr>
 <td><label><input type="checkbox" name="wenjian_name" value={{ wenjian.id }}>
  		<a href="/quotation_track/downloadwenjian/?name={{ wenjian.name }}">{{ wenjian.name }}</a><br></label>
 </td>
</tr>

Views:

def downloadwenjian(request):
        name = request.GET.get('name')
        #name = '251.xlsx'
        file =open(os.path.join(BASE_DIR, 'static','wenjian',name), 'rb')
        response =FileResponse(file)
        response['Content-Type']='application/vnd.ms-excel'
        response['Content-Disposition']='attachment;filename={}.xlsx'.format(name)
        return response

删除Excel:

HTML:

 <form action="{% url 'quotation_track:deletelist' %}" method="post">
        <input type="submit" class="btn btn-warning" value="批量删除">
        {% csrf_token %}
        <table id="example" class="display" width="100%" cellspacing="0" align="left">
            <thead>
            <tr>
                <th>專案號</th>
            </tr>
            </thead>
            <tbody>
            {% for wenjian in  wenjianlist %}
                <tr>
                    <td><label><input type="checkbox" name="wenjian_name" value={{ wenjian.id }}> <a
                            href="/quotation_track/downloadwenjian/?name={{ wenjian.name }}">{{ wenjian.name }}</a><br></label>
                    </td>
                </tr>
            {% endfor %}
            </tbody>


            </br>
        </table>

    </form>

Views:

 def deletelist(request):
        wenjianlist = request.POST.getlist('wenjian_name')
        for i  in  wenjianlist:
            wenjianmodel = Wenjian.objects.get(id=i)
            file = os.path.join(BASE_DIR, 'static', 'wenjian', wenjianmodel.name)

            os.remove(file)
            wenjianmodel.delete()

        wenjianlist = Wenjian.objects.all()
        return render(request, 'quotation_track/view_history.html', {'wenjianlist': wenjianlist})

Form表单获取数据

serialize

var data = $("#addForm").serialize();

FormData

获取form表单数据,含有File时候


  var form_data = new FormData();
  var file_info = $('#avatar')[0].files[0];
  form_data.append('file', file_info);
  form_data.append('name', $('#name').val());
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值