python-flask前端后端之间的数据通信

通过websocket实现

本例子的websocket通过socket.io实现

前端:

采用javascript编写前端的活动代码。前端必须包含库socket.io

  • html为
<script src="{{url_for('static', filename='js/socket.io.js')}}"></script>
  • javascript为
var namespace='/';
socket = io.connect(location.protocol+"//"+document.domain+":"+location.port+namespace);//建立一个io
socket.emit("myname",UserName);//向后端发送消息"myname" 消息携带数据"用户名"
socket.on("notify",function(data){
        msg.innerText="服务器消息:"+data.value;
    });//响应服务器消息"notify", 消息的数据为data

后端

python-flask+falsk-socktio编写后端

@socketio.on('myname',namespace='/')#响应消息
def onMyname(data):
    USERS[request.sid]=data
    print('用户情况',USERS)
socketio.emit("notify",msg)#发送消息

通过表单实现:

前端:

采用javascript编写前端的活动代码。
<form method="post" action="login">
    Name:<input type="text" name="name"/>
    PassWord:<input type="password" name="password"/>
    <input type="submit" value="Submit"/>
</form>

说明:method发送表单数据方式关键字,一般表单用post方式,而参数用get方式。action为响应该消息的后台的动作函数,该login表示路径对应的函数。

后端:

python-flask编写后端。
@app.route('/login', methods=['post'])
def login():
    name = request.form.get('name')
    password = request.form.get('password')
    if name == 'admin' and password == '123':
        return render_template('test1.html', name=name)
    return render_template('test1.html')
说明:这个login也就是后台的动作函数的路径,method就是获得数据的方式

通过http原始数据发送方式实现

前端:

function login(){
	var xmlhttp;
	if (window.XMLHttpRequest) {xmlhttp=new XMLHttpRequest();}
	//  IE7+, Firefox, Chrome, Opera, Safari 浏览器创建xmlhttp
	else {xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}
	// IE6, IE5 浏览器创建xmlhttp
	xmlhttp.open("POST","/login",true);
	xmlhttp.setRequestHeader("Content-type","application/json");
	xmlhttp.send(data_json);
}

说明:
xmlhttp.open用于打开一个xmlhttp,该xmlhttp发送数据方式为post,响应的路径为/login;
setRequestHeader用于设置xlmhttp发送数据的格式,此处为json.

后端:

@app.route("/login",methods=['POST'])
def login():
    data = request.get_data()
    json_data = json.loads(data)
    return 'json_data'

此处用request的get_data函数,也可以用get_json()

json_data = request.get_json()
# 注: get_json()  会自动将json数据转换为字符串,还有POST请求需要设置请求头发送参数为application/json格式,才可以接收到
#如果没有设置成json格式发送,请使用get_data接收参数
Flask中实现前端实时显示后端处理进度可以通过使用WebSocket技术来实现。WebSocket是一种基于TCP的协议,可以实现双向通信,使得前后端能够在同一个连接上进行实时的数据交换。 首先,我们需要在Flask中使用WebSocket,可以使用Flask-SocketIO来方便地实现WebSocket功能。安装Flask-SocketIO后,我们可以在Flask应用中使用socketio对象来实现WebSocket的功能。 在后端代码中,我们可以通过在任务处理函数中发送进度信息给前端。例如,我们可以在任务处理函数的循环中,使用socketio的emit函数发送当前任务的进度信息。前端页面将通过监听WebSocket消息的方式接收进度信息。 在前端代码中,我们需要在页面中引入SocketIO的JavaScript库,并创建一个SocketIO对象。然后,我们可以使用socket.on()函数来监听后端发送的进度信息,并根据接收到的进度信息来更新前端页面上的进度显示。 需要注意的是,为了防止过多的WebSocket连接导致性能问题,我们可以考虑使用Flask-SocketIO提供的命名空间和房间功能。通过使用命名空间和房间,我们可以将客户端分组,只向特定的客户端发送进度信息。 总结起来,实现Flask前端实时显示后端处理进度的关键步骤是:在Flask应用中使用Flask-SocketIO实现WebSocket功能,后端任务处理函数中使用socketio对象发送进度信息,前端页面中使用SocketIO对象监听进度信息并更新页面显示。这样就能够实现前端实时显示后端处理进度的功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值