web端|web全栈开发(web前后端数据交互。html5+jquery作为前端、Python+flask作为后端)

web全栈开发:web前后端数据交互。html5+jquery作为前端、Python+flask作为后端 温馨提示:本文基于我的上一篇博客的为基础:使用 Python 的 flask 架构搭建一个简单web网站

  • 下面是我写的一个简单前端web网页,我们分析这个网页的信息:
    web端|web全栈开发(web前后端数据交互。html5+jquery作为前端、Python+flask作为后端)
    文章图片
  • 1.”这是首页!”,这是一个纯文字的内容;
  • 2.“前往内容页”,这一端含有超链接的文字,我们只要点击蓝色、有下划线的“内容页”就可以转移到另外一个网页;
  • 3.“点击1”,这是一个按钮,我们可以把一个事件绑定到这个按钮上,当按钮被点击即可以执行绑定的事件,如发送一组数据到 flask 后端;
  • 4.“输入文本框”+“提交数据”,这是一个我们可以输入东西,然后点击“提交数据”,把输入的数据发送到后端 flask 中。
1.本次需要用到一个新技能:jQuery
  • 【web端|web全栈开发(web前后端数据交互。html5+jquery作为前端、Python+flask作为后端)】jQuery是辅助JavaScript开发的库,最基本的几个选择器:1.元素选择器、2.id选额器、3.class选择器、4.群组选择器、5.*选择器;
  • 我们通过选择器可以对选择的元素进行特定的设置
  • 在前端用jquery为特定 id 的元素添加点击触发事件,通过触发而执行任务功能事件,如发送数组、字符串等。
    若需要详细了解jQuery,到这里学习一下吧!http://www.lvyestudy.com/jquery/jq_list.aspx
2.建立一个实现前后端数据交互的工程文件,如下工程文件的结构: web端|web全栈开发(web前后端数据交互。html5+jquery作为前端、Python+flask作为后端)
文章图片

  • 放置在static中的图片和资源是能够被前端(JavaScript、jQuery)调用而实现动态更新。
  • 放置在template中的 html 页面能够调用 js 、css ,同时也可以被后端 flask 反馈到发出请求的浏览器而被浏览器渲染、解析出来。
3.实现超链接功能 1.main.py
from flask import Flask,render_template,request app = Flask(__name__)#参数是应用模块或者包的名称。若使用一个单一模块(本例),则用__name__ #该参数是必需的,Flask才知道在哪找到模板和静态文件等东西@app.route('/index/content')# 访问的地址,负责指向路由的路径 def content():# 指定的路由名称 hdy = "hdy" list = ["真帅","好酷","有才华"] return render_template('content.html',HDY=hdy,list=list)#自动寻找replace.html里面的键值对HDY替换成hdy@app.route('/index') def index(): return render_template('index.html')#会自动找templates文件夹里面的index.htmlif __name__=="__main__":#程序入口 app.run(host='127.0.0.1',port=8080)# 0.0.0.0地址可给本机所有的IP地址访问(按ctrl+左击进入run函数修改)

2.index.html
index - 锐客网 WOW WOW WOW !你变成了动感超人

  • 上面的代码中 {{url_for(‘content’)}} 是创建了一个超链接,这个超链接就是通过路由转移到路由名为 content 的路由中,而 content 这个路由在 flask 中 的main.py有定义。简单来说,点击这个超链接就会转到 content 的路由中,执行对应的操作。
3.运行 flask ,在浏览器输入: http://127.0.0.1:8080/index,可以得到下面的页面
web端|web全栈开发(web前后端数据交互。html5+jquery作为前端、Python+flask作为后端)
文章图片

4.当我们点击有颜色的下划线字 “动感超人” 这个超链接,即可以跳转到如下这个网页
web端|web全栈开发(web前后端数据交互。html5+jquery作为前端、Python+flask作为后端)
文章图片

4.实现在html前端使用jQuery将特定的数据发送到flask后端
  • 在工程目录下添加 static 文件夹,再在该文件夹下面添加 js 文件夹,在js文件夹下面添加一个jquery-3.5.1.js 的JavaScript库文件,如下图:
    web端|web全栈开发(web前后端数据交互。html5+jquery作为前端、Python+flask作为后端)
    文章图片
  • 方式1:下载 jquery-3.5.1.js 的包,下载连接:
  • 链接: https://pan.baidu.com/s/1LkAdc1pHoSbpmuKk-bvndA 提取码: 2020
  • 方式2:在线 jquery 连接:http://www.jq22.com/jquery-info122
  1. 在index.html中添加如下两个jquery.js中方式的任意一个:
index - 锐客网 WOW WOW WOW !你变成了动感超人 ="text/javascript" src="https://www.it610.com/static/js/jquery-3.5.1.js">="text/javascript" src="http://img.readke.com/220719/19252TV4-6.jpg">

5.现在介绍部分更新的代码:
  • 1.main.py新增部分:
@app.route('/index/response_01',methods=['GET']) def response_01(): # 设定下面这种格式接收数据,避免数据 state = -1 # state用来辅助判断后台是否准确收到了前台的数据 signal = -1 string = ''#使用try结构,更加安全 try: signal = int(request.args.get('num',0))# 接收整型数据,由于接受的数据格式仍是json即字符串,所以还需要作类型转换 string = request.args.get('man','')#接受字符串数据 print(signal) print(string) state += 1 except: passreturn simplejson.dumps({ 'state':state, 'reply_signal':signal+1, 'reply_string':string + 'i do!' })

main.py完整代码:
from flask import Flask,render_template,request,url_for,redirect,make_response import simplejson app = Flask(__name__)#参数是应用模块或者包的名称。若使用一个单一模块(本例),则用__name__ #该参数是必需的,Flask才知道在哪找到模板和静态文件等东西@app.route('/index/content')# 访问的地址,负责指向路由的路径 def content():# 指定的路由名称 hdy = "hdy" list = ["真帅","好酷","有才华"] return render_template('content.html',HDY=hdy,list=list)#自动寻找replace.html里面的键值对HDY替换成hdy@app.route('/index') def index(): return render_template('index.html')#会自动找templates文件夹里面的index.html@app.route('/index/response_01',methods=['GET']) def response_01(): # 设定下面这种格式接收数据,避免数据 state = -1 # state用来辅助判断后台是否准确收到了前台的数据 signal = -1 string = ''#使用try结构,更加安全 try: signal = int(request.args.get('num',0))# 接收整型数据,由于接受的数据格式仍是json即字符串,所以还需要作类型转换 string = request.args.get('man','')#接受字符串数据 print(signal) print(string) state += 1 except: passreturn simplejson.dumps({ 'state':state, 'reply_signal':signal+1, 'reply_string':string + 'i do!' })if __name__=="__main__":#程序入口 app.run(host='127.0.0.1',port=8080)# 0.0.0.0地址可给本机所有的IP地址访问(按ctrl+左击进入run函数修改)

  • 2.index.html新增部分:
    part1:新增的按钮,绑定id

part2:新增的按钮的触发事件
="text/javascript" src="https://www.it610.com/static/js/jquery-3.5.1.js">="text/javascript" src="ttpsh://ajax.aspnetcdn.com/ajax/jquery/jquery-3.5.1.min.js">="text/javascript">$('#btn1').on("click",function () { var data = https://www.it610.com/article/{'num': 6, 'man': 'hdy handsome boy' }; //定义要发送的数据,这是键值对的方式,分别为整型、字符串 $.ajax({ type:'GET',//数据的传输方式get请求方式 url: '/../index/response_01',//去到指定的路由 data:data,//要发送的数据,会被转化为查询字符串跟在url后面:/index/response_01/?num=6&man=hdy&handsome&boy dataType:'json',//数据的发送json格式 success:function (data) {//分别对应当数据提交并获取.success函数有一个参数data,用来表示从后台接收到的封装好的数据。 if(data.state>=0) {//# 这里的data就是json格式的数据 // 对比下面后台返回的数据格式,很容易发现规律 console.log(data.reply_signal); console.log(data.reply_string); } }, error:function () { console.log("failure!"); } }); })

part3:index.html的完整代码:
index - 锐客网 WOW WOW WOW !你变成了动感超人 ="text/javascript" src="https://www.it610.com/static/js/jquery-3.5.1.js">="text/javascript" src="ttpsh://ajax.aspnetcdn.com/ajax/jquery/jquery-3.5.1.min.js">="text/javascript">$('#btn1').on("click",function () { var data = https://www.it610.com/article/{'num': 6, 'man': 'hdy handsome boy' }; //定义要发送的数据,这是键值对的方式,分别为整型、字符串 $.ajax({ type:'GET',//数据的传输方式get请求方式 url: '/../index/response_01',//去到指定的路由 data:data,//要发送的数据,会被转化为查询字符串跟在url后面:/index/response_01/?num=6&man=hdy&handsome&boy dataType:'json',//数据的发送json格式 success:function (data) {//分别对应当数据提交并获取.success函数有一个参数data,用来表示从后台接收到的封装好的数据。 if(data.state>=0) {//# 这里的data就是json格式的数据 // 对比下面后台返回的数据格式,很容易发现规律 console.log(data.reply_signal); console.log(data.reply_string); } }, error:function () { console.log("failure!"); } }); })

3.点击运行。我在index.html页面中,点击按钮:按钮开关即可以触发按钮,触发前端给后端发送数据的事件,在调试窗口会打印如下信息:
整型:6、字符串:hdy handsome boy。
如下图所示:
web端|web全栈开发(web前后端数据交互。html5+jquery作为前端、Python+flask作为后端)
文章图片

6.再新增一个前端提交数据给后端的功能。要用到表单提交form技能
  • part1:main.py新增的代码:
@app.route('/index/response_02',methods=['post']) def response_02(): state = -1 txt = '' try: txt = request.form['txt']# 获取表单上名字为 txt 的主键值(为字符串) print(txt) state += 1 print(state)except: pass return redirect(url_for('index'))

  • part2:main.py完整的代码
from flask import Flask,render_template,request,url_for,redirect,make_response import simplejson app = Flask(__name__)#参数是应用模块或者包的名称。若使用一个单一模块(本例),则用__name__ #该参数是必需的,Flask才知道在哪找到模板和静态文件等东西@app.route('/index/content')# 访问的地址,负责指向路由的路径 def content():# 指定的路由名称 hdy = "hdy" list = ["真帅","好酷","有才华"] return render_template('content.html',HDY=hdy,list=list)#自动寻找replace.html里面的键值对HDY替换成hdy@app.route('/index') def index(): return render_template('index.html')#会自动找templates文件夹里面的index.html@app.route('/index/response_01',methods=['GET']) def response_01(): # 设定下面这种格式接收数据,避免数据 state = -1 # state用来辅助判断后台是否准确收到了前台的数据 signal = -1 string = ''#使用try结构,更加安全 try: signal = int(request.args.get('num',0))# 接收整型数据,由于接受的数据格式仍是json即字符串,所以还需要作类型转换 string = request.args.get('man','')#接受字符串数据 print(signal) print(string) state += 1 except: passreturn simplejson.dumps({ 'state':state, 'reply_signal':signal+1, 'reply_string':string + 'i do!' })@app.route('/index/response_02',methods=['post']) def response_02(): state = -1 txt = '' try: txt = request.form['txt']# 获取表单上名字为 txt 的主键值(为字符串) print(txt) state += 1 print(state)except: pass return redirect(url_for('index'))if __name__=="__main__":#程序入口 app.run(host='127.0.0.1',port=8080)# 0.0.0.0地址可给本机所有的IP地址访问(按ctrl+左击进入run函数修改)

  • part3:index.html新增的代码:

  • part4:index.html完整的代码:
index - 锐客网 WOW WOW WOW !你变成了动感超人
="text/javascript" src="https://www.it610.com/static/js/jquery-3.5.1.js">="text/javascript" src="ttpsh://ajax.aspnetcdn.com/ajax/jquery/jquery-3.5.1.min.js">="text/javascript">$('#btn1').on("click",function () { var data = https://www.it610.com/article/{'num': 6, 'man': 'hdy handsome boy' }; //定义要发送的数据,这是键值对的方式,分别为整型、字符串 $.ajax({ type:'GET',//数据的传输方式get请求方式 url: '/../index/response_01',//去到指定的路由 data:data,//要发送的数据,会被转化为查询字符串跟在url后面:/index/response_01/?num=6&man=hdy&handsome&boy dataType:'json',//数据的发送json格式 success:function (data) {//分别对应当数据提交并获取.success函数有一个参数data,用来表示从后台接收到的封装好的数据。 if(data.state>=0) {//# 这里的data就是json格式的数据 // 对比下面后台返回的数据格式,很容易发现规律 console.log(data.reply_signal); console.log(data.reply_string); } }, error:function () { console.log("failure!"); } }); })

  • 打开浏览器,输入地址: http://127.0.0.1:8080/index,得到如下页面:
    web端|web全栈开发(web前后端数据交互。html5+jquery作为前端、Python+flask作为后端)
    文章图片

    输入想要发给后端的数据,点击提交数据即可,再调试窗口可以看到后台提取并且打印出来我们在前端输入的数据,如下图:
    web端|web全栈开发(web前后端数据交互。html5+jquery作为前端、Python+flask作为后端)
    文章图片
7.至此,结束。 完成了前端、后端进行数据的交换。 最好,感谢这位博主,这边博文引用了他的内容:萧班

    推荐阅读