Django前后台数据传递是开发中常用的需求,后台传递到前台很容易,只需定义参数进行传递即可,下面介绍Django 前台传递数据到后台的常用方法。
1 通过form表单进行传递
form表单是开发中经常使用的,无论是用户登录注册还是采集信息都会使用到。通过form表单进行数据传递方法如下:
<form method="post" action="/infochange">
{% csrf_token %}
<label><font size="4px"><strong>用户名</strong></font></label><br>
<input type="text" name="uname"><br>
<label><font size="4px"><strong>密码</strong></font></label><br>
<input type="password" name="password" placeholder="请在这里输入新密码"><br>
<label><font size="4px"><strong>邮箱</strong></font></label><br>
<input type="email" name="email" placeholder="请在这里输入新邮箱"><br>
<label><font size="4px"><strong>电话</strong></font></label><br>
<input type="text" name="phone" placeholder="请在这里输入新电话"><br>
<input type="submit" value="修改" >
</form>
上面这个简单的例子是使用POST方法进行数据提交 实现用户修改个人信息,当提交涉及隐私的信息时请使用POST方法,否则可以使用GET方法,但使用POST方法时必须添加{% csrf_token %} ,不添加则Django会报错。
表单提交的路由为infochange,在url.py文件中配置相关路由与业务逻辑函数,这里不做介绍。
后台接收数据方法为:在infochange路由对应的业务逻辑函数中使用
request.POST.get('xxx') [POST方法]
request.GET.get('xxx') [GET方法]
xxx为表单input输入框的name属性,实际操作中例如获取用户名 即可通过如下方法实现
uname = request.POST.get('uname')
2 通过路由 ?传递数据
在实际操作中并不是所有情况都适合使用表单进行数据传递,下面结合实际项目介绍如何通过 ?参数进行传递。
实际需求如上图所示,通过点击右侧查看功能查看论文摘要等详细信息,由于数据是动态生成的,因此数据传递时也应该进行动态传递。
需求分析:通过点击查看功能,传递论文标题信息到后台业务逻辑函数(view.py),后台业务逻辑函数通过使用models类的filter方法进行此标题对应的论文信息的获取,因此此处涉及数据由前台传递到后台。(此处也可使用ajax处理,但使用?传递更为简便)
需要做有两个点:
1)点击查看功能传递对应的标题
2)传递标题到后台
1)通过js方法传递对应标题
<td width="100px"><center><button class="check" onclick="tijiao('{{ item }}')" >查看</button></center></td>
如上代码所示,通过对button设置点击方法onclick,onclick方法绑定js函数 tijiao ,tijiao('{{ item }}')意思为:item为后台传递的动态数据,即为标题,此处的{{ item }}就是标题经过后台传递到前台后接收的写法(动态数据,动态传递)。tijiao这个函数的参数即为动态数据-标题。
2)传递标题到后台
<script type="text/javascript">
function tijiao(title) {
var show = document.getElementById("id4");
show.innerHTML = '<div><iframe src="/detail?title='+title+'" width="1000px" height="825px" scrolling="yes" frameborder="0"></iframe></div>'
}
</script>
此代码为tijiao函数的功能,在tijiao函数中写入参数title,此参数的值就是1)中的动态数据{{ item }}。
var show = document.getElementById("id4");
此行代码是绑定页面,此处绑定id属性值为id4的div
然后使用innerHTML方法将
<div><iframe src="/detail?title='+title+'" width="1000px" height="825px" scrolling="yes" frameborder="0"></iframe></div>
插入到绑定的div中。
<div><iframe src="/detail?title='+title+'" width="1000px" height="825px" scrolling="yes" frameborder="0"></iframe></div>
如上代码是通过iframe技术进行页面展示,src为跳转的路由,此处使用?进行数据传递。
detail为事先定义好的路由,即为展示论文详细信息的页面,?title= 即使用?进行参数传递,参数为title,此参数的值为 tijiao 函数接收的动态数据,然后通过字符串连接(使用加号连接)进行路由的拼接,这样我们就可以把title参数对应的值传递到指定路由 detail中了。
由于传递数据不是涉及隐私的数据,因此采用GET方法进行传递,后台业务逻辑detail中通过:request.POST.get('title')
即可接收前端传来的标题信息!