Flask:使用表单操作中的参数调用函数

时间:2019-04-29 13:41:21

标签: python flask

routes.py中,我有一个函数:

@app.route('/')
@app.route('/makecsc_relocation') 
def makecsc_relocation(csc_post_index):
    ... 
    makeCscRelocationRep(repname, csc_post_index)
    return send_file(repname+'.xlsx', as_attachment=True, attachment_filename=repname+' '+csc_post_index+'.xlsx')

index中,我有以下内容:

@app.route('/')
@app.route('/index')
def index():
...
sForm = """<form action="makecsc_relocation">
                             Enter postal code here: <input type="text" name="post_index" value=""><br>
                             <input type="submit" value="Download report" ><br>
                             </form>"""

如果我使用在<form action="">中没有参数的函数并向其传递一个空的input值,则一切正常,但是当我尝试将input post_index传递为该参数时,函数,出现以下URL,出现“内部服务器错误”: http://myservername/makecsc_relocation?post_index=452680

我该如何解决?

2 个答案:

答案 0 :(得分:1)

功能参数始终是路径参数,即您向<parametername>注册的路由路径中的@app.route()个组件。您没有此类参数,因此请勿为您的函数提供任何参数。请参见Flask快速入门中的Variable Rules

Query 参数(来自表单的key = value对,放在URL中的?之后)以request.args结尾:

@app.route('/makecsc_relocation') 
def makecsc_relocation():
    csc_post_index = request.args.get('post_index')  # can return None
    # ... 
    makeCscRelocationRep(repname, csc_post_index)
    return send_file(repname+'.xlsx', as_attachment=True, attachment_filename=repname+' '+csc_post_index+'.xlsx')

请参阅快速入门的The Request Object部分。

  • 如果值是可选的,或者需要将其从字符串转换为相同类型的其他类型,请使用request.args.get(...)
  • 如果出错,请使用request.args[...],不要提供该值。如果缺少查询参数,则会向客户端提供一个400 Bad Request HTTP错误响应。

有关此映射的详细信息,请参见Werkzeug MultiDict documentation

答案 1 :(得分:0)

我最终得到了以下解决方案:

  1. 在表单中添加了NotificationCompat.DecoratedCustomViewStyle.方法
POST
  1. 在函数sForm = """<form action="makecsc_relocation" method="post"> Enter postal code here: <input type="text" name="post_index" value=""><br> <input type="submit" value="Download report" ><br> </form>""" 中,我添加了以下字符串:
makecsc_relocation

并将其传递给csc_post_index = request.form['post_index']