Dajngo学习
联想输入法
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();
HTML: display()
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());