一、HTML前端操作
Title{# 引入插件 #}
.icon{
margin: 0px 5px;
}
{# jquery必须放插件前 #}
$(function() {
bindEvent();
bindSave();
bindDel();
bindDelConfirm();
});
function bindDel() {
$('#tb').on('click','.del-row',function() {
$('#delModal').modal('show');
//获取当前行的ID
var rowId = $(this).parent().parent().attr('nid');
//设置给delNid
$('#delNid').val(rowId);
});
}
function bindDelConfirm() {
$('#delConfirm').click(function() {
var nid = $('#delNid').val();
$.ajax({
url: '/del_student.html',
type: 'GET',
data: {nid: nid},
success: function(arg) {
var dict = JSON.parse(arg);
if(dict.static) {
$('tr[nid="'+ nid +'"]').remove();
$('#delModal').modal('hide');
}
}
});
});
}
function bindEvent() {
$('#addBtn').click(function() {
$('#addModal').modal('show');
});
}
function bindSave() {
$('#btnSave').click(function() {
// 获取表单所有信息,可优化,见最后
var postData = {};
$('#addModal').find('input,select').each(function () {
console.log($(this)[0]);
var v = $(this).val();
var n = $(this).attr('name');
if(name=='gender'){
if($(this).prop('checked')){
postData[n] = v;
}
}else{
postData[n] = v;
}
});
console.log(postData);
$.ajax({
url: '/addStudent.html',
type: 'POST',
data: postData,
success: function(arg) {
console.log(arg);
//arg为字符串
//JSON.parse将字符串转行为字典
var dict = JSON.parse(arg);
//字典用点取值
if(dict.status) {
//window.location.reload();
//自增id = dict.data
createRow(postData, dict.data);
//关闭对话框
$('#addModal').modal('hide');
}else {
$('#errorMsg').text(dict.message);
}
}
});
});
function createRow(postData, nid) {
var tr = document.createElement('tr');
$(tr).attr('nid',nid);
var tdId = document.createElement('td');
tdId.innerHTML = nid;
$(tr).append(tdId);
var tdUser = document.createElement('td');
tdUser.innerHTML = postData.username;
$(tr).append(tdUser);
var tdAge = document.createElement('td');
tdAge.innerHTML = postData.age;
$(tr).append(tdAge);
var tdAge = document.createElement('td');
if(postData.gender == '1') {
tdAge.innerHTML = 'True';
}else{
tdAge.innerHTML = 'False';
}
$(tr).append(tdAge);
var tdClass = document.createElement('td');
var text = $('select[name="cls_id"]').find('option[value="' + postData.cls_id + '"]').text();
tdClass.innerHTML = text;
$(tr).append(tdClass);
//创建标签第二种方式,用字符串
$(tr).append(tdHandle);
$('#tb').append(tr);
}
}
二、py文件后台操作
from django.shortcuts import render,HttpResponse
from app01 import models
# Create your views here.
def students(request):
stu_list = models.Students.objects.all()
cls_list = models.Classes.objects.all()
return render(request,"students.html",{"stu_list": stu_list, 'cls_list': cls_list})
import json
def addStudent(request):
response = {'status': True, 'message': None, 'data': None}
try:
u = request.POST.get("username")
a = request.POST.get("age")
g = request.POST.get("gender")
c = request.POST.get("cls_id")
obj = models.Students.objects.create(
name=u,
age=a,
gender=g,
cs_id=c
)
response['data'] = obj.id
except Exception as e:
response['status'] = False
response['message'] = '用户输入有误'
result = json.dumps(response,ensure_ascii=False)
return HttpResponse(result)
def del_student(request):
response = {'static': True, 'message': None}
try:
nid = request.GET.get("nid")
models.Students.objects.filter(id=nid).delete()
except Exception as e:
print(555555555,type(e))
response['static'] = False
result = json.dumps(response)
return HttpResponse(result)
总结:
1、序列化
Python:
字符串 = json.dumps(对象)
对象 = json.loads(字符串)
JavaScript:
对象 = JSON.parse(字符串)
字符串 = JSON.stringify(对象)
应用场景:
数据传输时,发送和接收都以字符串形式进行
2.ajax
$.ajax({
url:
type:
data:
dataType: 'JSON', // 自动把arg转为对象
success: function(arg) {
// arg是对象
}
})
3、
HTML中获取数据(input和select标签) =》 取出数据存入一个字典,可直接用于ajax的data使用
4、事件委托
$('要绑定标签的上级标签’).on('click', '要绑定的标签',function() {} )
$('要绑定标签的上级标签’).delegate( '要绑定的标签','click',function() {} )
5、表单获取优化
/*获取表单所有信息方式
1、使用each循环
2、var data = $('#form表单的ID').serialize() (优化推荐)
data存为字典类型,可直接调用
*/
报错归纳:
argument list
自变量列表
Internal Server Error
内部服务器错误
存在的bug:添加学生后不能直接删除,要刷新才能做删除操作