Flask - 将 URL 中的变量传递给函数
Flask - pass variable from URL to function
我是 Flask 的新手,所以如果我说了任何愚蠢的话,请原谅并忘记。
我正在尝试制作一个简单的票务应用程序,但我已经到了需要制作一个 "Assign" 按钮的地步,以便可以将某张票分配给某个用户。
我的代码目前是这样的:
模板代码:
{% for ticket in tickets %}
<tr {% if ticket.ticket_status == 0 %} class="warning" {% elif ticket.ticket_status == 1 %} class="info" {% endif %}>
<td>{{ ticket.ticket_id }}</td>
<td>{{ ticket.loc_name }}</td>
<td>{{ ticket.loc_ip }}</td>
<td>{{ ticket.ticket_title }}</td>
<td><a class="btn btn-default btn-xs" href="#">Read</a></td>
<td>{{ ticket.ticket_status }}</td>
<td>
{% if ticket.ticket_status == 0 %}
<a class="btn btn-info btn-xs" href="{{ url_for('assign_to', ticket_id = ticket.ticket_id) }}">Assign</a>
{% else %}
{{ ticket.ticket_owner }}
{% endif %}
</td>
<td>{{ ticket.ticket_open }}</td>
<td>{{ ticket.ticket_assign }}</td>
<td>
{% if not ticket.ticket_close and ticket.ticket_status == 0 %}
<a class="btn btn-danger btn-xs" href="">Close</a>
{% elif not ticket.ticket_close and ticket.ticket_status == 1 %}
<a class="btn btn-success btn-xs" href="">Close</a>
{% elif ticket.ticket_status == 2 %}
{{ ticket.ticket_close }}
{% endif %}
</td>
<td>{{ ticket.time_spent }}</td>
</tr>
{% endfor %}
烧瓶位:
@planck.route("/admin")
def admin_area():
cur = g.db.execute("SELECT * FROM tickets ORDER BY ticket_id DESC")
tickets = [dict(ticket_id=row[0], loc_name=row[1], loc_ip=row[2], ticket_title=row[3], ticket=row[4], ticket_status=row[5], ticket_owner=row[6], ticket_open=row[7], ticket_assign=row[8], ticket_close=row[9], time_spent=row[10]) for row in cur.fetchall()]
return render_template("admin.html", tickets=tickets)
""" This is what I'm trying to assign with """
@planck.route("/admin/assign_ticket")
def assign_to():
user = "alex"
g.db.execute("INSERT INTO tickets (ticket_owner, ticket_assign) VALUES (?, DATETIME('NOW')) WHERE ticket_id='?'", [user, ?])
g.db.commit()
return redirect(url_for("admin_area"))
基本上一切正常,只是我不知道如何从锚点的 URL 中获取 ticket_id。
锚点看起来像这样:http://planck:5000/admin/assign_ticket?ticket_id=12
谁能分享一些知识吗?
谢谢。
请求中有一个名为 args 的字典,其中包含所有查询字符串参数。
from flask import request
@planck.route("/admin/assign_ticket")
def assign_to():
ticket_id = None
if 'ticket_id' in request.args:
ticket_id = request.args['ticket_id']
我看到两个选项:
a) 您将可变部分添加到您的 URL。类似的东西:
@planck.route("/admin/assign_ticket/<int:ticket_id>")
def assign_to(ticket_id):
some_work()
我认为这是解决此问题的一种更符合 Flask 的方法,但它需要与问题中提到的方法不同的 url。相反,它会像:http://planck:5000/admin/assign_ticket/12
b) 只是:
from flask import request
并且 request.args 是带有您的 url 查询参数的字典。
from flask import request
@planck.route("/admin/assign_ticket")
def assign_to():
ticket_id = request.args.get('ticket_id')
some_work()
未传递此类参数时请注意正确处理。
我是 Flask 的新手,所以如果我说了任何愚蠢的话,请原谅并忘记。
我正在尝试制作一个简单的票务应用程序,但我已经到了需要制作一个 "Assign" 按钮的地步,以便可以将某张票分配给某个用户。
我的代码目前是这样的:
模板代码:
{% for ticket in tickets %}
<tr {% if ticket.ticket_status == 0 %} class="warning" {% elif ticket.ticket_status == 1 %} class="info" {% endif %}>
<td>{{ ticket.ticket_id }}</td>
<td>{{ ticket.loc_name }}</td>
<td>{{ ticket.loc_ip }}</td>
<td>{{ ticket.ticket_title }}</td>
<td><a class="btn btn-default btn-xs" href="#">Read</a></td>
<td>{{ ticket.ticket_status }}</td>
<td>
{% if ticket.ticket_status == 0 %}
<a class="btn btn-info btn-xs" href="{{ url_for('assign_to', ticket_id = ticket.ticket_id) }}">Assign</a>
{% else %}
{{ ticket.ticket_owner }}
{% endif %}
</td>
<td>{{ ticket.ticket_open }}</td>
<td>{{ ticket.ticket_assign }}</td>
<td>
{% if not ticket.ticket_close and ticket.ticket_status == 0 %}
<a class="btn btn-danger btn-xs" href="">Close</a>
{% elif not ticket.ticket_close and ticket.ticket_status == 1 %}
<a class="btn btn-success btn-xs" href="">Close</a>
{% elif ticket.ticket_status == 2 %}
{{ ticket.ticket_close }}
{% endif %}
</td>
<td>{{ ticket.time_spent }}</td>
</tr>
{% endfor %}
烧瓶位:
@planck.route("/admin")
def admin_area():
cur = g.db.execute("SELECT * FROM tickets ORDER BY ticket_id DESC")
tickets = [dict(ticket_id=row[0], loc_name=row[1], loc_ip=row[2], ticket_title=row[3], ticket=row[4], ticket_status=row[5], ticket_owner=row[6], ticket_open=row[7], ticket_assign=row[8], ticket_close=row[9], time_spent=row[10]) for row in cur.fetchall()]
return render_template("admin.html", tickets=tickets)
""" This is what I'm trying to assign with """
@planck.route("/admin/assign_ticket")
def assign_to():
user = "alex"
g.db.execute("INSERT INTO tickets (ticket_owner, ticket_assign) VALUES (?, DATETIME('NOW')) WHERE ticket_id='?'", [user, ?])
g.db.commit()
return redirect(url_for("admin_area"))
基本上一切正常,只是我不知道如何从锚点的 URL 中获取 ticket_id。 锚点看起来像这样:http://planck:5000/admin/assign_ticket?ticket_id=12
谁能分享一些知识吗?
谢谢。
请求中有一个名为 args 的字典,其中包含所有查询字符串参数。
from flask import request
@planck.route("/admin/assign_ticket")
def assign_to():
ticket_id = None
if 'ticket_id' in request.args:
ticket_id = request.args['ticket_id']
我看到两个选项:
a) 您将可变部分添加到您的 URL。类似的东西:
@planck.route("/admin/assign_ticket/<int:ticket_id>")
def assign_to(ticket_id):
some_work()
我认为这是解决此问题的一种更符合 Flask 的方法,但它需要与问题中提到的方法不同的 url。相反,它会像:http://planck:5000/admin/assign_ticket/12
b) 只是:
from flask import request
并且 request.args 是带有您的 url 查询参数的字典。
from flask import request
@planck.route("/admin/assign_ticket")
def assign_to():
ticket_id = request.args.get('ticket_id')
some_work()
未传递此类参数时请注意正确处理。