【问题标题】:Flask request variable not recognizedFlask 请求变量无法识别
【发布时间】:2018-06-08 01:27:31
【问题描述】:

所以我正在为 Flask 中的路由创建一个函数来处理 POST 请求,但 Flask 出于某种原因无法识别我的请求变量。我有这个 Python 代码:

@app.route("/decide", methods=["GET", "POST"])
def decide():
    if request.method == "POST":
        # Ensure user has permission to modify this request
        request_id = request.form.get("job_id")
        if not request_id:
            return redirect("/")

        request = Requests.query.get(request_id)
        if not request:
            return redirect("/")

        job = Jobs.query.get(request.job_id)
        if not job:
            return redirect("/")

        job_creator = job.creator_id
        if job_creator != session["user_id"]:
            return redirect("/")

        if request.form.get("submit") == "accept":
            print("accept")

        if request.form.get("submit") == "reject":
            print("reject")
     return redirect("/")

使用此 HTML 代码: {% 扩展“dad.html”%}

{% if job.creator_id == session.user_id %}

{% block head %}
<title>{{job.title}}</title>
{% endblock %}

{% block body %}

<h1>{{job.title}}</h1>
<br />
<br />
{% if total > 0 %}
    <h3>There {% if total != 1%}are{% else %}is{% endif %} {{total}} request{% if total != 1%}s{% endif %} for this job</h3>
{% else  %}
    <h3>There are no requests for this job currently</h3>
{% endif %}

<br />

{% for requ in requests %}
    <form method="POST" id="form" action="/decide">
    <div class="row">
        <input type="hidden" value="{{requ.id}}" name="job_id" />
        <div class="col-md-3">
            <h3><a href="/profiles/{{requ.requester_username}}">{{requ.requester_fname}} {{requ.requester_lname}}</a></h3>
        </div>
        <div class="col-md-1">
            <button type="submit" name="submit" value="accept" id="accept" class="btn btn-success">Accept</button>
        </div>
        <div class="col-md-1">
            <button type="submit" name="ding" value="reject" class="btn btn-danger">Reject</button>
        </div>
    </div>
    </form>

    <br />
    <br />
{% endfor %}

{% endblock %}

{% endif %}

然后我得到一个错误:

UnboundLocalError: local variable 'request' referenced before assignment

在线:

if request.method == "POST":

我的所有其他路线都喜欢这项工作,只是出于某种原因它无法识别“请求”。我还从烧瓶中导入了请求对象,所以这不是问题。感谢您提供的任何帮助!

【问题讨论】:

    标签: python post flask routes request


    【解决方案1】:

    其实代码的问题是python和request混淆了

    1. flask 有一个名为 request 的模块
    2. 您正在声明一个名为 request 的变量

      request = Requests.query.get(request_id)

    在这里使用它

     job = Jobs.query.get(request.job_id)
    

    python 对使用您声明的变量或烧瓶请求模块的请求感到困惑。

    只需将变量名称更改为其他名称

    【讨论】:

      【解决方案2】:

      这很可能是因为您稍后在代码块中重新定义了 request 变量。

      request = Requests.query.get(request_id)
      

      尝试将该变量名称更改为其他名称,以免发生命名空间冲突。

      【讨论】:

        猜你喜欢
        • 2017-01-04
        • 2013-02-19
        • 2021-11-16
        • 1970-01-01
        • 2018-12-10
        • 1970-01-01
        • 2021-02-27
        • 2013-05-15
        • 2014-06-08
        相关资源
        最近更新 更多