web全栈开发:web前后端数据交互。html5+jquery作为前端、Python+flask作为后端 温馨提示:本文基于我的上一篇博客的为基础:使用 Python 的 flask 架构搭建一个简单web网站
- 下面是我写的一个简单前端web网页,我们分析这个网页的信息:
文章图片
- 1.”这是首页!”,这是一个纯文字的内容;
- 2.“前往内容页”,这一端含有超链接的文字,我们只要点击蓝色、有下划线的“内容页”就可以转移到另外一个网页;
- 3.“点击1”,这是一个按钮,我们可以把一个事件绑定到这个按钮上,当按钮被点击即可以执行绑定的事件,如发送一组数据到 flask 后端;
- 4.“输入文本框”+“提交数据”,这是一个我们可以输入东西,然后点击“提交数据”,把输入的数据发送到后端 flask 中。
- 【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
文章图片
- 放置在static中的图片和资源是能够被前端(JavaScript、jQuery)调用而实现动态更新。
- 放置在template中的 html 页面能够调用 js 、css ,同时也可以被后端 flask 反馈到发出请求的浏览器而被浏览器渲染、解析出来。
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 的路由中,执行对应的操作。
文章图片
4.当我们点击有颜色的下划线字 “动感超人” 这个超链接,即可以跳转到如下这个网页
文章图片
4.实现在html前端使用jQuery将特定的数据发送到flask后端
- 在工程目录下添加 static 文件夹,再在该文件夹下面添加 js 文件夹,在js文件夹下面添加一个jquery-3.5.1.js 的JavaScript库文件,如下图:
文章图片
- 方式1:下载 jquery-3.5.1.js 的包,下载连接:
- 链接: https://pan.baidu.com/s/1LkAdc1pHoSbpmuKk-bvndA 提取码: 2020
- 方式2:在线 jquery 连接:http://www.jq22.com/jquery-info122
- 在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。
如下图所示:
文章图片
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,得到如下页面:
文章图片
输入想要发给后端的数据,点击提交数据即可,再调试窗口可以看到后台提取并且打印出来我们在前端输入的数据,如下图:
文章图片
推荐阅读
- 树莓派|树莓派4B的串口使用,并通过串口与其他设备经过通讯协议发送、接收数据。
- 树莓派|(七)树莓派系列教程(树莓派4B连接LCD1602液晶显示屏并且显示内容)
- 2022升级!《慕慕到家》家政小程序组件化进阶实战某课完结
- 快来试试用 Python 将你的照片转化为“速写”
- 大型Python项目依赖树很烦(教你一键理清)
- Python 超简单一键美化你的文章
- libtorch|YOLOv4 libtorch推理【附代码】
- Vue|vue中axios封装请求
- typeScript|TypeScript接口与泛型的使用