一个匪夷所思的问题——提交表单后一直显示400 Bad Request

今天开发时遇到一个奇怪的问题。

目的:实现在写文章页面添加TeX公式
原理:白嫖知乎的接口,表单中输入TeX公式返回知乎的图片链接
问题:提交表单后一直显示400 Bad Request

已排除的可能性:上传的表单中访问不存在的值。因为删了这行还是一样。

视图函数:

@main_bp.route("/tools/tex", methods=("GET", "POST",))
def textools():
    if request.method == "POST":
        tex = request.form["tex"]
        return render_template("main/tex.html",
            url = f"https://www.zhihu.com/equation?tex={ urlparse(tex) }"
        )
    return render_template("main/tex.html", url="")

main/tex.html里的表单:

<form method="post">
    <textarea
        type="text" name="tex" required
        class="form-control" placeholder="add TeX here..."
        style="margin-top: 0px; margin-bottom: 0px; height: 144px;"
    ></textarea>
    <input class="btn btn-primary btn-block" type="submit">
</form>

感觉可能是因为知乎接口返回的貌似不是一个图片,而是一个svg?
你所提供的信息太少,能否提供更多的信息,如你的tex.html的url参数部分

CSRF的问题,在<form method="post">后面加一行

<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">

就可以了

2 Likes

Rice 之前发邮件跟我说没用 Flask-WTF,然后我就忽略了 CSRF 扩展……

其实我能发现问题也是因为我看出来他在写Flog(main_bp以及main/tex.html太明显了),我的项目我自己当然熟悉会出什么问题,毕竟该踩的坑我都踩过一遍了…
大概是rice认为在视图函数内没用到Flask-WTF吧,全局实际上是启用了的。

1 Like