当前位置:   article > 正文

python web框架之jQuery+Ajax+Django/flask 前后端交互完美案例_pythonweb中ajax请求前后端代码

pythonweb中ajax请求前后端代码

python web框架:flask和django入门,jQuery+ajax示例

博客由本人原创,如需转载请附上博文地址!

前言:网上看了很多关于python web框架的前后端传值代码,写的很乱,对初学者很不友好。我踩过很多坑,写此贴以作为警示,一口吃一个胖子肯定是不行的,学习web框架中jQuery+Ajax的异步传值,如果连Ajax和jQuery的基础都不好,肯定是很费劲的,启示我以后学习应该逐步进行,到网上到处翻资料一个一个试代码太费时间了,有空的时候多看看书,系统地学一学比什么都强。本博客为了记录开发过程中犯下的错误,个人认为还是属于最基础层面,如有不足之处欢迎留言指出,谢谢!

 

首先看Django

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

1.前端:form表单。文件:index.html

  1. <form id="my_form" method="get">
  2. <input type="text" name="rec_user" id="rec_text"/>
  3. <input type="button" id="target_test" value="Rec"/>
  4. </form>
  5. <script src="/static/js/jsTest.js"></script>

2.单独的js文件,写jQuery+Ajax代码。文件:jsTest.js

  1. $("$target_test").click(function(){
  2. $.ajax({
  3. url:"/test/",
  4. type:"GET",
  5. dataType:"json",
  6. async:true,
  7. data:{user:$("#rec_text").serialize()}, //.val()应该也是可以的
  8. success:function(result){
  9. //回调函数,接收views传回的数据,在前端展示
  10. var d = result["……"]
  11. document.getElementById("……").setAttribute("……",d)
  12. //$("#……").html(d)
  13. },
  14. error:function(XMLHttpRequest,textStatus,errorThrown){
  15. alert(XMLHttpResponse.status)
  16. ……
  17. },
  18. })
  19. })

3.django的urls.py中的映射配置

  1. urlpatterns = [
  2. path('',views.index),
  3. path('test/',views.do_filter)
  4. ]

4.django的views.py中的函数,处理逻辑

  1. def index(request):
  2. return render(request,'index.html')
  3. def do_filter(request):
  4. if request.is_ajax():
  5. usr = request.GET['user']
  6. # 传过来的数据格式为: rec_text=……
  7. # 此处是为了取出"="后面的值
  8. # print(usr)
  9. correct_usr = usr[9:]
  10. # return HttpResponse(json.dumps(……))
  11. return HttpResponse(…….to_json())

 

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

其次是flask

flask的前后端交互也是费了我好长时间,和django一样,关于是否需要序列化,数据格式到底是类似字典的格式还是直接传,到底是get方法还是post方法,究竟是使用form表单还是input标签,这些都是选择,就是因为选择太多,又没有一个标准答案,网上的代码也是千奇百怪,我弄了好久才成功。感觉到自己还是基础太不扎实了,不论是html,css,js还是Ajax,web框架配置。说了这么多前端好像也没什么别的东西了。总之就是还是要把基础打牢,然后懂得原理,这样才能提高开发效率,减少不明所以浪费时间的bug。

 

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

1.前端:文件:index.html。这回我没有使用表单,而是仅仅使用input标签的button和text属性来完成数据交互任务。以后再试试form吧哈哈哈,拖延症又犯了……

  1. <!--很简单的两行代码,一个按钮一个输入框,省略了不必要的class属性-->
  2. <input id="flask" type="text"/>
  3. <input id="test" type="button">Go!</input>
  4. <script src="/static/js/logic.js"></script>

2.logic.js文件,用来写jQuery+Ajax

方法一:

  1. $("#test").click(function () {
  2. $.ajax({
  3. url:"/testController", //注意此处写法,对应路由写法/testControlller/,/testController/
  4. type:"GET",
  5. dataType:"json",
  6. async:true,
  7. data:{usr:$("#flask").val()}, //此处使用$("#flask").serialize()后端接收不到数据
  8. success:function (result) {
  9. // 回调函数,处理app.py返回的结果
  10. },
  11. error:function (XMLHttpRequest,textStatus,errorThrown) {
  12. alert(XMLHttpRequest.status)
  13. alert(XMLHttpRequest.readyState)
  14. alert(textStatus)
  15. }
  16. });
  17. })

 

方法二:

  1. $("#test").click(function () {
  2. // var data_flask = $("#flask").serialize() 这句话不对,后端会显示None
  3. var data_flask = $("#flask").val()
  4. var get_data = {"usr":data_flask}
  5. $.ajax({
  6. url:"/testController",
  7. type:"GET",
  8. dataType:"json",
  9. async:true,
  10. data:get_data,
  11. success:function (result) {
  12. // 回调函数,可以console.log(result)做一个测试
  13. },
  14. error:function (XMLHttpRequest,textStatus,errorThrown) {
  15. alert(XMLHttpRequest.status)
  16. alert(XMLHttpRequest.readyState)
  17. alert(textStatus)
  18. }
  19. });
  20. })

3.app.py函数,路由转发。

  1. from flask import Flask
  2. from flask import render_template
  3. from flask import jsonify
  4. from flask import request
  5. from flask import json
  6. app = Flask(__name__)
  7. @app.route('/')
  8. def index():
  9. return render_template('index.html')
  10. //注意路由写法。如果路由写法为/testController,那么Ajax url写法必须为/testController
  11. @app.route('/testController/',methods=['GET'])
  12. def testController():
  13. test_flask = request.values.get("usr")
  14. print(test_flask)
  15. //返回必须是json格式
  16. return json.dumps(test_flask)
  17. if __name__ == '__main__':
  18. app.run()

目前从我学习的过程来看,django和flask+Ajax最易出错的地方就是路径,路由和前后端数据传递(主要是json格式问题,还要python和js处理json的方法不熟悉),如何将前后端组织起来,是否使用form表单,form表单的action要不要写,input标签到底是submit type还是button type,到底是button标签还是input标签,是点击按钮用oncllick触发js还是js监听按钮点击事件,这些是我们需要研究的非常重要的事情,当然我上一句话问了那么多问题,也说明我的前端基础很薄弱,走了太多弯路。我学到的经验是,传递都使用json格式,提交数据到后台不一定使用form,jQuery取到html标签值一般不会出错,除非id发生冲突等,对flask.request和django里面request的用法也不是很熟悉,还是要多看官方的文档和正确的文档代码才行。

 

这几天学习python web的经历让我明白了基础的重要性。打好了语言基础,会使用检查元素调试代码,会查看请求响应信息,懂得浏览器原理,以后做前端这方面会轻松一些。从整体看,不论是做任何开发,好的基础能够让你少犯低级错误,知道如何对错误进行定位,如何快速了解错误原理,提高开发效率,心累的时候也会少一些。

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

闽ICP备14008679号