![](/img/trans.png)
[英]Send and recieve an XML file from client to server using python flask
[英]How to send data from server to client in Python using Flask?
我正在制作一个将数据发送到客户端的应用程序,然后客户端打印数据。
我使用Flask作为处理服务器端的后端框架,并使用另一个python脚本为当前客户端生成随机ID,客户端每4秒检查一次是否有新数据进入,如果有新数据则应打印该数据。
后端代码
@app.route('/data/api/interact/<string:client_id>', methods=['GET', 'POST'])
@login_required
def interact(client_id):
global data
form = Interact()
data = ''
if form.is_submitted():
get_data = form.ct.data
if get_data == 'hello':
data = 'Hi how are you?'
return redirect(url_for('data_handler', client_id=client_id, data=form.ct.data))
return render_template('interact.html', form=form, client_id=client_id)
@app.route('/data/api/interact/handler/', methods=['GET', 'POST'])
def data_handler():
client_id = request.args.get('client_id')
get_data = request.args.get('data')
return json.dumps({'client_id': client_id, 'data': get_data})
客户端脚本
handler_url = 'http://192.168.0.102:5000/data/api/interact/handler/'
class check_data(threading.Thread):
def __init__(self, client_id):
threading.Thread.__init__(self)
self.event = threading.Event()
self.client_id = client_id
def run(self):
global handler_url
try:
while not self.event.is_set():
file = urllib2.urlopen(handler_url)
xml = file.read()
print xml
file.close()
except:
pass
self.event.wait(4)
def new_client():
client_id = 'ClientId' + str(random.randrange(1, 500))
return client_id
client_id = 'null'
while client_id == 'null':
client_id = new_client()
if 'null' not in client_id:
break
print 'Client ID: ' + client_id
client = check_data(client_id)
client.start()
一切正常,但是如果我将数据从服务器发送到客户端,它将打印:
{'data': '', 'client_id': null}
在这段代码中:
@app.route('/data/api/interact/handler', methods=['GET', 'POST'])
def data_handler():
client_id = request.args.get('client_id')
get_data = request.args.get('data')
return json.dumps({'client_id': client_id, 'data': get_data})
您将返回带有client_id
和data
值的JSON,这些值是从查询参数( request.args
)获取的,但不发送这些参数( urllib2.urlopen(handler_url)
)。
client_id
未传递到服务器,服务器希望将client_id
和data
作为查询参数。 相反,您访问的网址没有任何参数
file = urllib2.urlopen(handler_url)
。
可以通过以下方式将查询字符串参数传递给GET请求:
url = handler_url + '?client_id' + self.client_id +'&data=YOURDATA_HERE'
file = urllib2.urlopen(url)
您可能可以使用urlencode
使其更优雅。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.