Flask - 将参数传递给 URL - 405 错误

Posted

技术标签:

【中文标题】Flask - 将参数传递给 URL - 405 错误【英文标题】:Flask - Pass argument to URL - 405 Error 【发布时间】:2017-05-05 23:24:28 【问题描述】:

我正在学习 Flask,但在将参数传递给 URL 以在另一个页面上使用时遇到了一些问题。例如,我在/index 上有一个表单,我希望它重定向到可以打印表单数据的/results 页面。我的尝试是这样的:

from flask import render_template
from flask import redirect
from flask import url_for

from app import app
from .forms import LoginForm

@app.route('/')
@app.route('/index', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        name = form.artistName.data
        return redirect(url_for('result', name=name))
    else:
        return redirect('/index')
    return render_template('index.html',
                           title='Sign In',
                           form=form)

@app.route('/result/<name>')
def result(name):
    return render_template('results.html')

重定向到 /results 页面时,我收到 405 错误 Method not allowed for the requested URL。我想使用表单的结果作为参数在/results 上构造一个 URL。

我该怎么做?非常感谢

【问题讨论】:

你能添加你所面临的错误的堆栈跟踪吗? 请发布错误回溯消息。 我在重定向到 /results 页面时收到 405 错误 Method not allowed for the requested URL 【参考方案1】:

你定义了

@app.route('/result/<name>')

表示其默认的http方法是GET; 当它运行时:

if form.validate_on_submit():
    # POST method
    name = form.artistName.data
    # redirect Will use 'POST'
    return redirect(url_for('result', name=name))

所以,你得到了Method not allowed for the requested URL

我认为您可以将POST 方法添加到@app.route('/result/&lt;name&gt;')

【讨论】:

POST 方法添加到@app.route('/result/&lt;name&gt;') 会导致重定向循环,我不知道为什么。 是的,它确实重定向到登录。实际上,只有 Get 方法允许直接重定向。我认为这会有所帮助:@app.route('/result/', methods=['GET', 'POST'])

以上是关于Flask - 将参数传递给 URL - 405 错误的主要内容,如果未能解决你的问题,请参考以下文章

如何将参数传递给任务队列?

有没有办法将参数传递给 Flask-Restless GET_SINGLE 预处理器?

从后面的代码将参数传递给 URL

是否可以将查询参数传递给 Django % url % 模板标签?

如何将 URL 参数传递给选择器

通过 url 将参数传递给 sql server 报告服务