如何在页面上存储Request.form.get数据

时间:2019-11-18 23:33:49

标签: python flask

我目前正在向Flask提交POST请求,其中包含我用来过滤数据库请求的数据,该数据显示在另一个URL上。

这一切正常,但是,刷新页面后,自然会丢失数据,并且我收到内部服务器错误。

如果用户点击刷新,如何存储这些数据以重新加载?

@app.route("/orders/<string:order_id>", methods=["GET", "POST"])
@login_required
def orderinfo(order_id):


# select order info
order_info = db.execute("""SELECT * FROM orders JOIN customers 
                           ON customers.id = orders.customer_id 
                           WHERE order_id = :order_id""", order_id=order_id)

# select recipe details 
rname = request.form.get('rname')
recipe = db.execute("SELECT * FROM recipes WHERE rname=:rname", rname=rname)

return render_template('/orderdetails.html', order_info=order_info, recipe=recipe)

谢谢。

编辑:

DEBUG:cs50:SELECT * FROM recipes JOIN ingredients ON 
ingredients.product_code = recipes.ingredient_id WHERE rname='CHE/006' AND 
approved=1
INFO:werkzeug:127.0.0.1 - - [20/Nov/2019 21:25:47] "POST /orders/6 HTTP/1.1" 
200 -
DEBUG:cs50:SELECT * FROM orders JOIN customers ON customers.id = 
orders.customer_id WHERE order_id = '6'
DEBUG:cs50:SELECT * FROM recipes JOIN ingredients ON 
ingredients.product_code = recipes.ingredient_id WHERE rname=NULL AND 
approved=1
ERROR:app:Exception on /orders/6 [GET]
Traceback (most recent call last):
File "c:\users\brad\desktop\final\env\lib\site-packages\flask\app.py", line 
2446, in wsgi_app
response = self.full_dispatch_request()
File "c:\users\brad\desktop\final\env\lib\site-packages\flask\app.py", line 
1951, in full_dispatch_request
rv = self.handle_user_exception(e)
File "c:\users\brad\desktop\final\env\lib\site-packages\flask\app.py", line 
1820, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "c:\users\brad\desktop\final\env\lib\site-packages\flask\_compat.py", 
line 39, in reraise
raise value
File "c:\users\brad\desktop\final\env\lib\site-packages\flask\app.py", line 
1949, in full_dispatch_request
rv = self.dispatch_request()
File "c:\users\brad\desktop\final\env\lib\site-packages\flask\app.py", line 
1935, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:\Users\Brad\Desktop\Final\helpers.py", line 14, in 
decorated_function
return f(*args, **kwargs)
File "C:\Users\Brad\Desktop\Final\app.py", line 462, in orderinfo
recipe = db.execute("SELECT * FROM recipes JOIN ingredients ON 
ingredients.product_code = recipes.ingredient_id WHERE rname=:rname AND 
approved=1", rname=session['rname'])
File "c:\users\brad\desktop\final\env\lib\site- 
packages\flask\templating.py", line 140, in render_template
ctx.app,
File "c:\users\brad\desktop\final\env\lib\site- 
packages\flask\templating.py", line 120, in _render
rv = template.render(context)
File "c:\users\brad\desktop\final\env\lib\site- 
packages\jinja2\asyncsupport.py", line 76, in render
return original_render(self, *args, **kwargs)
File "c:\users\brad\desktop\final\env\lib\site- 
packages\jinja2\environment.py", line 1008, in render
return self.environment.handle_exception(exc_info, True)
File "c:\users\brad\desktop\final\env\lib\site- 
packages\jinja2\environment.py", line 780, in handle_exception
reraise(exc_type, exc_value, tb)
File "c:\users\brad\desktop\final\env\lib\site-packages\jinja2\_compat.py", 
line 37, in reraise
raise value.with_traceback(tb)
File "C:\Users\Brad\Desktop\Final\templates\orderdetails.html", line 1, in 
top-level template code
{% extends "layout.html" %}
File "C:\Users\Brad\Desktop\Final\templates\layout.html", line 114, in top- 
level template code
{% block main %}{% endblock %}
File "C:\Users\Brad\Desktop\Final\templates\orderdetails.html", line 17, in 
block "main"
<span class="badge badge-pill badge-success">{{  recipe[0]["flavour"] }} 
</span>
File "c:\users\brad\desktop\final\env\lib\site- 
packages\jinja2\environment.py", line 411, in getitem
return obj[argument]
jinja2.exceptions.UndefinedError: list object has no element 0
INFO:werkzeug:127.0.0.1 - - [20/Nov/2019 21:25:49] "GET /orders/6 HTTP/1.1" 
500 -

为澄清环境,当前在本地设置和通过Google Chrome进行测试。

1 个答案:

答案 0 :(得分:0)

使用会话(了解更多herehere):

基本上,它是这样的:

@app.route('/')
def run():
    session['rname'] = request.form.get('rname')
    # more code here

现在,即使刷新页面,您也可以使用会话中的值并将其存储。

您可以根据需要对其进行修改。

希望这会有所帮助。祝你好运。

相关问题