前后台数据交互方式
在前后台交互的时候,当我们使用模态对话框时,后台数据处理完后涉及到数据传输时必须要使用json格式的数据。
第一种数据交互方式:
后台处理数据给前台返回处理结果:res = {'code':1000,'data': '数据处理完成‘}
通过 来发送,这样发送过去的数据自动会转成字符串发送过去,并且不需要我们在手动转回字典格式
return JsonResponse(res)
前台在处理完数据后,成功就可以使用下面的代码来刷新当前页面
window.location.reload()
第二种交互方式:
手动叫要传输的数据转为字符串,前台收到以后要手动转回字典格式
return HttpResponse(json.dumps(res))
前台在处理好数据后,可以选择刷新当前页面,也可以返回跳转前页面
widnow.location.href = '/classes/'; window.location.reload(); # 刷新当前页面
表格数据一对多
操作有外键关联,对应关系为一对多的表格与操作单表时不同,需要考虑的点更多,细节上有许多要把控的点。
以添加为例,在添加数据时我们需要考虑外键的存在,外键就代表了要和另外一张表取得关联,本次操作的学生列表,与班级列表有关联,外键设置的是班级列表的id,所以当我们增加学生列表中的学生信息时,不仅要增加学生姓名,还要选择班级id,这里可以使用先查找班级列表得到班级的id和班级名称,这里得到得到班级列表是通过我们在前台html页面中,通过点击a标签向
后台发起get请求,a标签发起的请求为get请求
<a href="/add_student/">添加学生按钮</a>
后台得到请求后,通过pymysql得到数据后,用模板渲染将数据渲染到页面上
sql = 'select * from classes;' cla = py.my_pymysql() classes = cla.get_all(sql) return render(request,'add_student.html',{'classes':classes})
因为学生列表中的外键是班级表的id所以我们可以在前台通过班级名得到班级id 班级在页面展示选择
使用select形式的下拉框,将value设置成id 文本设置为班级名。
<form action="/add_student/" method="post"> 添加学生姓名: <input type="text" name="studentname"> <select name="class_id" id=""> {% for item in classes %} } <option value="{{ item.id }}">{{ item.name }}</option><br> {% endfor %} </select> <input type="submit" value="提交">
数据发送到后台后通过pymysql操作列表并将students网页通过重定向返回students页面。
def add_student(request): if request.method == 'GET': sql = 'select * from classes;' cla = py.my_pymysql() classes = cla.get_all(sql) return render(request,'add_student.html',{'classes':classes}) else: studentname = request.POST.get('studentname') class_id = request.POST.get('class_id') print(studentname,class_id) sql = 'insert into students(name,class_id) values (%s,%s)' stu = py.my_pymysql() stu.add(sql,studentname,class_id) return redirect('/students/')
更新数据
更新数据时我们要得到表中我们要修改的原数据值,这里我们已更改班级为例,如果我们想要
定位到我们原来的班级名称可以通过一个if判断来实现;
<form action="/up_student/" method="post"> <input type="hidden" name="stuid" value="{{ student.sid }}"> 学生姓名: <input type="text" name="stuname" value="{{ student.sname }}" > <br> 选择班级: <select name="classid" id=""> {% for item in classes %} {% if item.id == student.cid %} <option value="{{ item.id }}" selected>{{ item.name }}</option> {%else%} <option value="{{ item.id }}" >{{ item.name }}</option> {% endif %} {% endfor %} </select> <input type="submit" value="提交"> </form>