经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Django » 查看文章
django和vue实现数据交互的方法
来源:jb51  时间:2019/8/21 10:54:17  对本文有异议

我使用的是jQuery的ajax与django进行数据交互,遇到的问题是django的csrf

传输数据的方法如下:

  1. $(function() {
  2. $.ajax({
  3. url: 'account/register',
  4. type: 'post',
  5. dataType:'json',
  6. data: $('#form1').serialize(),
  7. success: function (result) {
  8. console.log(result);
  9. if (result) {
  10. alert("result");
  11. }
  12. },
  13. error: function () {
  14. alert("error");
  15. },
  16. })
  17. })
  18. })

django对应的代码

  1. def register(request):
  2. if request.method=="POST":
  3. if request.POST.get('name'):
  4. return render(request,'success.html')
  5. else:
  6. return HttpResponse("账号不能为空“)

当提交表单的时候,会出现

如果前端可以有django渲染,这个问题很好解决,只需要在要提交的表单中加入{% csrf_token %},但是在这中情况下显然是行不通的,通过在网上的搜索,我找到了这样的解决方案,完整代码如下:

  1. $(function() {
  2. $('#sub').click(function () {
  3. $.ajaxSetup({
  4. beforeSend: function(xhr, settings) {
  5. function getCookie(name) {
  6. var cookieValue = null;
  7. if (document.cookie && document.cookie != '') {
  8. var cookies = document.cookie.split(';');
  9. for (var i = 0; i < cookies.length; i++) {
  10. var cookie = jQuery.trim(cookies[i]);
  11. // Does this cookie string begin with the name we want?
  12. if (cookie.substring(0, name.length + 1) == (name + '=')) {
  13. cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
  14. break;
  15. }
  16. }
  17. }
  18. return cookieValue;
  19. }
  20. if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
  21. // Only send the token to relative URLs i.e. locally.
  22. xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
  23. }
  24. }
  25. });
  26. $.ajax({
  27. url: 'account/register',
  28. type: 'post',
  29. dataType:'json',
  30. data: $('#form1').serialize(),
  31. success: function (result) {
  32. console.log(result);
  33. if (result) {
  34. alert("result");
  35. }
  36. },
  37. error: function () {
  38. alert("success");
  39. },
  40. })
  41. })
  42. })

这样就可以成功提交表单了

方法来源 https://stackoverflow.com/questions/5100539/django-csrf-check-failing-with-an-ajax-post-request

以上这篇django和vue实现数据交互的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号