当前位置:   article > 正文

前后端数据交互_前后端数据怎么交互

前后端数据怎么交互

1、路由请求:

1.1、django中的get:

  1. 如:
  2. <form method="get"> #路由通过get请求进行获取q值
  3. <div class="input-group">
  4. <input type="text" name="q" class="form-control" placeholder="搜索">#输入框数据以q=的方式拼接到链接
  5. <span class="input-group-btn">
  6. <button class="btn btn-default" type="submit"> #type="submit"这样才能传
  7. <span class="glyphicon glyphicon-search" aria-hidden="true"></span>
  8. </button>
  9. </span>
  10. </div>
  11. </form>

后端可以通过search_data = request.GET.get('q', "")获取到。

1.2、django中的post:

  1. 表单通过post请求传过来
  2. <form method="post" novalidate>
  3. {% csrf_token %}
  4. <div class="form-group">
  5. <label >用户名</label>
  6. {{ form.username }}
  7. <span style="color: red">{{ form.username.errors.0 }}</span>
  8. </div>
  9. <div class="form-group">
  10. <label >密码</label>
  11. {{ form.password }}
  12. <span style="color: red">{{ form.password.errors.0 }}</span>
  13. </div>
  14. <input type="submit" value="登 录" class="btn btn-primary">
  15. </form>
  16. 则后端则用request.POST来获取到:
  17. class LoginForm(forms.Form):
  18. username=forms.CharField(
  19. label="用户名",
  20. widget=forms.TextInput(attrs={"class":"form-control","placeholder":"用户名"}),
  21. required=True
  22. )
  23. password=forms.CharField(
  24. label="密码",
  25. widget=forms.PasswordInput(render_value=True,attrs={"class": "form-control","placeholder":"密码"}),
  26. required=True
  27. )
  28. def login(request):
  29. if request.method=="GET":
  30. form = LoginForm()
  31. return render(request,'login.html',{'form':form})
  32. form = LoginForm(data=request.POST)

2、动态路由:

2.1、django中方案

  1. 前端:
  2. <a class="btn btn-primary btn-xs" href="/user/{{ i.nid }}/edit/">编辑</a>
  3. 路由对应:
  4. path('admin/<int:nid>/edit/', admin.admin_edit), 这里可获取到id
  5. 视图函数:
  6. def admin_edit(request,nid):
  7. 这样就可以使用前端获取的nid了,如:
  8. row_object=models.Admin.objects.filter(id=nid).first()

3、JS:

3.1、django中的ajax

  1. get请求:
  2. 基于dom绑定onclick="clickMe()
  3. <input id="x".....>
  4. <input type="button" class="btn btn-primary" value="点击" onclick="clickMe();" />
  5. <script type="text/javascript">
  6. function clickMe() {
  7. $.ajax({
  8. url:'/task/list/',
  9. type:"get" , 说明这是个get请求
  10. data:
  11. 通过标签id定位数据。也可以将input输入框放在一个form表单里,
  12. 然后用表单的id进行定位,用.serialize()打包成类似字典的东西。
  13. 表单中的每个输入框的name=""就是传到后台的数据的字典key
  14. n1:$("#x").val(),
  15. dataType:"JSON"
  16. success : function (res) {
  17. console.log(res);
  18. }
  19. })
  20. }
  21. </script>
  22. 这样在/task/list/的对应路由函数就可以通过
  23. request.GET获取到data的对象集合
  24. 基于jquery绑定
  25. <input id="x" .....>
  26. <input id="btn1" class="btn btn-primary" value="点击" />
  27. <script type="text/javascript">
  28. $(function (){
  29. 这里页面加载完成后直接执行
  30. binBtn1Event();
  31. })
  32. function binBtn1Event(){
  33. $("#btn1").click(function (){
  34. $.ajax({
  35. url:'/task/list/',
  36. type:"get" ,
  37. data:n1:$("#x").val(),
  38. success : function (res) {
  39. console.log(res);
  40. }
  41. })
  42. })
  43. }
  44. </script>

对于post请求,则需要额外在对应视图函数文件上:

from django.views.decorators.csrf import csrf_exempt

然后紧挨着对应视图函数上:

后端接收:

  1. 案例:
  2. 通过post获取个表单:
  3. form = TaskModeLForm(data=request.POST)
  4. 通过get获取一个数:
  5. uid=request.GET.get('uid')

!!!注意前端发送过来的数据类型,都是queryset(字典集合),你懂的。

上面说了那么多,其实都是ajax往后端发送。下面是后端返回到前端:

  1. 案例:
  2. from django.http import JsonResponse
  3. from django.core.exceptions import ValidationError
  4. @csrf_exempt
  5. def task_add(request):
  6. form=TaskModelForm(data=request.POST)
  7. if form.is_valid():
  8. form.save()
  9. data_dict = {"status": True}
  10. return JsonResponse(data_dict)
  11. data_dict={"status":False,'error':form.errors}
  12. 记住,ajax后端返回的一定要json格式
  13. return JsonResponse(data_dict)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/566556
推荐阅读
相关标签
  

闽ICP备14008679号