首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打包数据并将其作为表单数据发送到flask服务器应用程序

打包数据并将其作为表单数据发送到flask服务器应用程序
EN

Stack Overflow用户
提问于 2020-06-19 00:53:56
回答 1查看 36关注 0票数 0

我正在尝试用python random包构造一些数据,并使用requests包将其作为表单数据发送。出于测试目的,我将此内容发送到httpbin.org以查看响应。

sensor.py

代码语言:javascript
复制
import time, requests
import pandas as pd
from datetime import date, datetime
import random, json


def json_serial(obj):
    """JSON serializer for objects not serializable by default json code"""

    if isinstance(obj, (datetime, date)):
        return obj.isoformat()
    raise TypeError ("Type %s not serializable" % type(obj))


stuff = {}
stamp = json_serial(datetime.now())
elctricMeterReading = (random.random() * 440) - 15

stuff['Date'] = stamp
stuff['MeterReading'] = elctricMeterReading


print(stuff)
r = requests.post('https://httpbin.org/post', data=stuff)
#r = requests.post('http://localhost:5000/datainform', params=stuff)


print("Status code: ", r.status_code)
print("Printing Entire Post Request")
print(r.json())

在下面来自httpbin的响应中,我可以看到'form': {'Date': '2020-06-18T11:42:31.408767', 'MeterReading': '179.49598690916307'},那么我如何在Flask App上使用它呢?

httpbin.org响应:

代码语言:javascript
复制
Status code:  200
Printing Entire Post Request
{'args': {}, 'data': '', 'files': {}, 'form': {'Date': '2020-06-18T11:42:31.408767', 'MeterReading': '179.49598690916307'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Content-Length': '67', 'Content-Type': 'application/x-www-form-urlencoded', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.21.0', 'X-Amzn-Trace-Id': 'Root=1-5eeb9977-4144b1b998be98a1a47d6934', 'X-B3-Parentspanid': 'a327575ce788b35a', 'X-B3-Sampled': '0', 'X-B3-Spanid': '097957453d58e94e', 'X-B3-Traceid': '101a34ed0555e0f4a327575ce788b35a', 'X-Envoy-External-Address': '207.171.103.240', 'X-Forwarded-Client-Cert': 'By=spiffe://cluster.local/ns/httpbin-istio/sa/httpbin;Hash=ea1c0e0fbd1a2a4dcfdc36e743ce618cf614b92afb4e5a6b19e7ba9a2ac7ecdb;Subject="";URI=spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account'}, 'json': None, 'origin': '207.171.103.240,10.100.91.201', 'url': 'https://httpbin.org/post'}

如果我为我的Flask应用程序使用sensor.py (注释掉httpbin.org),这会抛出一个错误:werkzeug.exceptions.HTTPException.wrap.<locals>.newcls: 400 Bad Request: KeyError: 'Date'

Flask App代码:

代码语言:javascript
复制
from flask import Flask, make_response, request, render_template, jsonify, make_response
import pandas as pd
from sqlalchemy import create_engine
from pandas.api.types import is_string_dtype
from pandas.api.types import is_numeric_dtype
import requests

app = Flask(__name__)


@app.route('/datainform', methods=['POST'])
def getdatatwo():

    stamp = request.form['Date']
    meterReading = request.form['MeterReading']
    #outTemp = request.form['outTemp']
    print('Date',stamp)
    print('MeterReading',meterReading)

    return 'OK', 200

if __name__ == '__main__':
    app.run(host='0.0.0.0',debug=True)

任何建议都非常感谢...

EN

回答 1

Stack Overflow用户

发布于 2020-06-20 01:56:31

经过更多的测试。我不是很确定为什么,但是将这个添加到Flask应用程序中似乎工作得很好……result = request.form,但如果没有它,代码将出错..

下面是完整的脚本:

代码语言:javascript
复制
@app.route('/datainform', methods=['POST'])
def getdatatwo():

    result = request.form
    print(result)
    stamp = request.form['Date']
    meterReading = request.form['MeterReading']
    #outTemp = request.form['outTemp']
    print('Date',stamp)
    print('MeterReading',meterReading)

    return 'OK', 200

if __name__ == '__main__':
    app.run(host='0.0.0.0',debug=True)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62455268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档