vantabs多页渲染_Django--多对多表操作/通过母版渲染页面

Django--多对多表操作+母版

今天还以一个学生管理系统为例,先通过pymysql这个模块,进行多对多表操作,以下两种方式

新url的方式:直接新开一个页面进行操作

ajax模态框的方式:在本页面通过模态框的方式进行操作

需求

对老师表进行增删改查,此时老师表和班级表是多对多关系

步骤

开始写功能

添加路由

设计模板

写对应的接口函数

添加路由映射关系

urlpatterns = [

# 新url方式

url(r'^teachers/', teachers),

url(r'^add_teacher/', add_teacher),

url(r'^del_teacher/', del_teacher),

url(r'^update_teacher/', update_teacher),

# ajax方式

url(r'^ajax_add_teacher/', ajax_add_teacher),

url(r'^ajax_update_teacher/', ajax_update_teacher),

]

老师表的增删改查

# students.html -- 通过继承layout.html页面

{% extends 'layout.html' %}

{% block mycss %}

select {

height: 34px;

width: 203px;

padding: 6px 12px;

border: 1px solid #ccc;

border-radius: 4px;

background-color: #fff;

}

{% endblock %}

{% block mycontent %}

学生表

ID姓名年龄班级更新删除

{% for stu in students %}

{{ stu.sid }}{{ stu.name }}{{ stu.age }}{{ stu.cname }}

style="color: white;text-decoration: none;">更新

ajax更新

style="color: white;text-decoration: none;">删除

{# ajax删除#}

{% endfor %}

添加学生

ajax添加学生

{# 遮罩层 #}

{# 弹出框层 #}

{# 增加学生 #}

{# #}

增加学生

名字:

年龄:

班级:

{% for class in classes %}

{{ class.cname }}

{% endfor %}

添加

取消

{# 更新学生 #}

更新学生

姓名:

年龄:

班级:

{% for class in classes %}

{{ class.cname }}

{% endfor %}

更新

取消

{% endblock %}

{% block myjs %}

{# 删除学生 #}

$('.delete').click(function () {

res = window.confirm('是否删除学生');

return res;

});

{# 增加学生 #}

$('#ajax_add').click(function () {

$('.shadow, .add_model').css('display', 'block');

{#$('.shadow, .add_model').show()#}

});

$('.add_cancel').click(function () {

$('.shadow, .add_model').hide();

window.location.href = '/students/'

});

$('#add').click(function () {

var name = $('#add_student').val();

var age = $('#add_age').val();

var cid = $('#add_cid').val();

{#console.log(classname);#}

$.ajax({

type: 'POST',

url: '/ajax_add_student/',

data: {'name': name, 'age': age, 'cid': cid},

success: function (data) {

var res = JSON.parse(data);

if (res['code'] == 10000) {

alert(res['msg']);

window.location.href = '/students/';

} else {

$('#add_error').text(res['msg']);

}

}

})

});

{# 更新学生 #}

$('.ajax_update').click(function () {

$('.shadow, .update_model').show();

var info = $(this).parent().prevAll();

{#console.log(info)#}

var age = info[1].innerText;

var name = info[2].innerText;

var id = info[3].innerText;

var cid = $(info[0]).attr('clsid');

$('#up_age').val(age);

$('#up_name').val(name);

$('#up_sid').val(id);

$('#up_cid').val(cid);

});

$('.up_cancel').click(function () {

$('.shadow, .update_model').hide();

window.location.href = '/students/';

});

$('#update').click(function () {

var name = $('#up_name').val();

var age = $('#up_age').val();

var id = $('#up_sid').val();

var cid = $('#up_cid').val();

{#console.log(classname,id);#}

$.ajax({

type: 'POST',

url: '/ajax_update_student/',

data: {'id': id, 'name': name, 'age': age, 'cid': cid},

success: function (data) {

var res = JSON.parse(data);

if (res['code'] == 10000) {

alert(res['msg']);

window.location.href = '/students/';

} else {

$('#up_error').text(res['msg']);

}

}

})

});

{% endblock %}

# add_student.html -- 通过继承layout.html页面

{% extends 'layout.html' %}

{% block mycss %}

select {

height: 34px;

width: 203px;

padding: 6px 12px;

border: 1px solid #ccc;

border-radius: 4px;

background-color: #fff;

}

{% endblock %}

{% block mycontent %}

增加老师

老师姓名:

班级列表:

{% for class in classes %}

{{ class.cname }}

{% endfor %}

{{ data }}

取消

{% endblock %}

# update_student.html -- 通过继承layout.html页面

{% extends 'layout.html' %}

{% block mycss %}

select {

height: 34px;

width: 203px;

padding: 6px 12px;

border: 1px solid #ccc;

border-radius: 4px;

background-color: #fff;

}

{% endblock %}

{% block mycontent %}

更新老师信息

姓名:

班级:

{% for class in classes %}

{{ class.cname }}

{% endfor %}

{{ data }}

取消

{% endblock %}

# urls.py

@deco

def teachers(request):

sql = 'select teachers.id as tid,tname,cname,cid from teachers left join teacher2class on teachers.id = teacher2class.tid left join classes on classes.id = teacher2class.cid order by tid'

res = mysql(sql)[0]

# print(res)

sql = 'select * from classes'

classes = mysql(sql)[0]

teachers = {}

# cids = {}

for dic in res:

if dic['tid'] in teachers:

teachers[dic['tid']]['cname'].append(dic['cname'])

# cids[dic['tid']]['cids'].append(dic['cid'])

else:

teachers[dic['tid']] = {'tid': dic['tid'], 'tname': dic['tname'], 'cname': [dic['cname'], ]}

# cids[dic['tid']] = {'classids': [dic['cid'], ]}

return render(request, 'teachers.html', {'teachers': teachers.values(), 'classes': classes})

@deco

def add_teacher(request):

sql = 'select * from classes'

classes = mysql(sql)[0]

if request.method == "GET":

return render(request, 'add_teacher.html', {'classes': classes})

else:

tname = request.POST.get('tname')

cids = request.POST.getlist('cid')

if not (tname and cids):

data = '姓名或班级不能为空'

return render(request, 'add_teacher.html', {'classes': classes, 'data': data})

sql = 'select * from teachers where tname=%s'

res = mysql(sql, (tname,))[0]

if res:

data = '老师已存在'

return render(request, 'add_teacher.html', {'classes': classes, 'data': data})

sql = 'insert into teachers(tname) values(%s)'

mysql(sql, (tname,))

sql = 'select id from teachers where tname=%s'

tid = mysql(sql, (tname,))[0].get('id')

# print(tid)

# print(cids)

for cid in cids:

cid = int(cid)

sql = 'insert into teacher2class(tid,cid) values (%s,%s)'

mysql(sql, (tid, cid))

return redirect('/teachers/')

@deco

def del_teacher(request):

# print(request)

tid = request.GET.get('id')

# print(tid)

sql = 'delete from teacher2class where tid=%s'

mysql(sql, (tid,))

sql = 'delete from teachers where id=%s'

mysql(sql, (tid,))

return redirect('/teachers/')

@deco

def update_teacher(request):

sql = 'select * from classes'

classes = mysql(sql)[0]

if request.method == 'GET':

tid = request.GET.get('id')

sql = 'select * from teachers where id=%s'

teacher = mysql(sql, (tid,))[0]

# print(teacher)

return render(request, 'update_teacher.html', {'teacher': teacher, 'classes': classes})

else:

id = request.POST.get('tid')

tname = request.POST.get('tname')

cids = request.POST.getlist('cid')

sql = 'select * from teachers where id=%s'

teacher = mysql(sql, (id,))[0]

if not (tname and cids):

data = '名字或班级不能为空'

return render(request, 'update_teacher.html', {'teacher': teacher, 'classes': classes, 'data': data})

sql = 'select * from teachers where tname=%s and id != %s'

res = mysql(sql, (tname, id))[0]

if res:

data = f'老师--{tname}--已存在'

return render(request, 'update_teacher.html', {'teacher': teacher, 'classes': classes, 'data': data})

sql = 'delete from teacher2class where tid=%s'

mysql(sql, (id,))

sql = 'update teachers set tname=%s where id=%s '

mysql(sql, (tname, id))

for cid in cids:

cid = int(cid)

sql = 'insert into teacher2class(tid,cid) values(%s,%s)'

mysql(sql, (id, cid))

return redirect('/teachers/')

ajax操作老师表

# urls.py

@deco

def ajax_add_teacher(request):

tname = request.POST.get('tname')

cids = request.POST.getlist('cid')

res = {'code': None, 'msg': None}

if not (tname and cids):

res['code'] = 10001

res['msg'] = '姓名或班级不能为空'

return HttpResponse(json.dumps(res))

sql = 'select * from teachers where tname=%s'

resp = mysql(sql, (tname,))[1]

if resp:

res['code'] = 10001

res['msg'] = f'老师---{tname}-已存在'

return HttpResponse(json.dumps(res))

sql = 'insert into teachers(tname) values(%s)'

mysql(sql, (tname,))

sql = 'select id from teachers where tname=%s'

tid = mysql(sql, (tname,))[0].get('id')

# tid = mysql(sql, (tname,))[0]

print(tid)

for cid in cids:

cid = int(cid)

sql = 'insert into teacher2class(tid,cid) values (%s,%s)'

mysql(sql, (tid, cid))

res['code'] = 10000

res['msg'] = f'老师--{tname}--信息添加成功'

return HttpResponse(json.dumps(res))

@deco

def ajax_update_teacher(request):

id = request.POST.get('id')

tname = request.POST.get('tname')

cids = request.POST.getlist('cid')

res = {'code': None, 'msg': None}

if not (tname and cids):

res['code'] = 10001

res['msg'] = '名字或班级不能为空'

return HttpResponse(json.dumps(res))

sql = 'select * from teachers where tname=%s and id!=%s'

resp = mysql(sql, (tname, id))[0]

if resp:

res['code'] = 10001

res['msg'] = '老师已存在'

return HttpResponse(json.dumps(res))

sql = 'delete from teacher2class where tid=%s'

mysql(sql, (id,))

sql = 'update teachers set tname=%s where id=%s '

mysql(sql, (tname, id))

for cid in cids:

cid = int(cid)

sql = 'insert into teacher2class(tid,cid) values(%s,%s)'

mysql(sql, (id, cid))

res['code'] = 10000

res['msg'] = f'老师--{tname}--更新成功'

return HttpResponse(json.dumps(res))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值