Python 烧瓶表单POST请求以填充剩余的jinja2模板

Python 烧瓶表单POST请求以填充剩余的jinja2模板,python,flask,Python,Flask,我有一个Flask web表单,它使用自由文本输入字段“搜索成员”。我想使用一些命令行工具(如curl)以编程方式加载测试这个网站,而不是用Selenium之类的工具模拟用户行为 以下是Python后端: #test.py 从时间上导入睡眠 从烧瓶导入烧瓶,渲染\u模板 来自flask_wtf进口FlaskForm 从wtforms导入StringField、SubmitField 需要从wtforms.validators导入数据 类配置: 机密密钥='SUPER\u SECRET\u VAL

我有一个Flask web表单,它使用自由文本输入字段“搜索成员”。我想使用一些命令行工具(如
curl
)以编程方式加载测试这个网站,而不是用Selenium之类的工具模拟用户行为

以下是Python后端:

#test.py
从时间上导入睡眠
从烧瓶导入烧瓶,渲染\u模板
来自flask_wtf进口FlaskForm
从wtforms导入StringField、SubmitField
需要从wtforms.validators导入数据
类配置:
机密密钥='SUPER\u SECRET\u VALUE'
app=烧瓶(名称)
app.config.from_对象(config)
类别测试表格(烧瓶表格):
member\u id=StringField('member id',validators=[DataRequired()]))
submit=SubmitField('submit')
@app.route('/test',methods=['GET','POST'])
def test():
form=TestForm()
if form.validate_on_submit():
member\u id\u字段=form.member\u id
member\u id=member\u id\u field.data
#模拟使用'member\u id'做某事`
睡眠(2)
结果='some result'
返回渲染模板(
“test.html”,
title='test',
形式=形式,
结果=结果
)
其他:
返回渲染模板(
“test.html”,
title='test',
形式
)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app.run()
这是HTML表单:

搜索成员
{{form.hidden_tag()}}

{{form.member_id.label}

{{form.member_id(size=32)}

{{form.submit()}}

{%如果结果已定义%} 结果是:{Result} {%endif%}
首先,我使用
python3test.py
启动服务器,然后使用
curl-xpost-H“Content-Type:application/json”-d'{“member_id”:“123”}http://127.0.0.1:5000/test/
尝试向表单发送成员ID以触发搜索逻辑

如果我在浏览器中访问该网站,我可以输入一个ID,
结果是:
部分填充。但是,使用
curl
,我没有得到任何回报:

搜索成员

成员ID


如果
结果为:
填充,则我知道我的表单正在工作。因此,使用网站的方法是可行的,但命令行却不行。问题可能是什么?

这不是最佳解决方案,因为它没有考虑jinja渲染时间,但您可以添加一层
flask\u restful
,为核心数据处理部件开发REST API:

从时间导入睡眠
从烧瓶导入烧瓶,呈现模板,请求
来自flask_wtf进口FlaskForm
从LASKU restful导入Api,资源
从wtforms导入StringField、SubmitField
需要从wtforms.validators导入数据
类配置:
机密密钥='SUPER\u SECRET\u VALUE'
def get_数据(成员id):
睡眠(2)
返回“正在获取{member_id}的数据”
类别测试表格(烧瓶表格):
member\u id=StringField('member id',validators=[DataRequired()]))
submit=SubmitField('submit')
类TestApi(资源):
def get(自我):
data=request.get_json(force=True)
获取_数据(数据)
返回数据,200
def post(自我):
data=request.get_json(force=True)
获取_数据(数据)
返回数据,200
app=烧瓶(名称)
app.config.from_对象(config)
api_manager=api(应用程序)
api_管理器。添加_资源(TestApi,“/api/test”)
@app.route('/test',methods=['GET','POST'])
def test():
form=TestForm()
if form.validate_on_submit():
member\u id\u字段=form.member\u id
member\u id=member\u id\u field.data
#模拟使用'member\u id'做某事`
数据=获取数据(成员id)
返回渲染模板(
“test.html”,
形式=形式,
结果=数据
)
其他:
返回渲染模板(
“test.html”,
形式
)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app.run()
然后使用:

curl-xpost-H“内容类型:application/json”-d'{“member_id”:“123”}”http://127.0.0.1:5000/api/test