在flask中提交数据时如何处理错误
Posted
技术标签:
【中文标题】在flask中提交数据时如何处理错误【英文标题】:How to handle error when submitting data in flask 【发布时间】:2022-01-20 04:17:40 【问题描述】:当通过用户输入提交数据并且数据与 mongodb 集合中的任何内容都不匹配时,Jinja 模板会抛出错误(TypeError: 'NoneType' object is not subscriptable)但是当集合中存在数据时,数据会加载到模板没有任何问题,我不知道如何处理这个错误。 以及如何在提交后刷新页面,因为重新加载页面后搜索输入的结果不会消失。 任何帮助将不胜感激,并提前致谢。
这是我的 Python 代码:
import os
from datetime import datetime
from flask import (
Flask, flash, render_template,
redirect, request, session, url_for)
from flask_pymongo import PyMongo
from bson.objectid import ObjectId
from werkzeug.security import generate_password_hash, check_password_hash
if os.path.exists("env.py"):
import env
app = Flask(__name__)
app.config["MONGO_DBNAME"] = os.environ.get("MONGO_DBNAME")
app.config["MONGO_URI"] = os.environ.get("MONGO_URI")
app.secret_key = os.environ.get("SECRET_KEY")
mongo = PyMongo(app)
@app.route("/")
@app.route("/home", methods=["GET", "POST"])
def home():
return render_template("home.html")
@app.route("/search", methods=["GET", "POST"])
def search():
query = request.form.get("company-name")
company = mongo.db.company.find_one(
"company_name": query)["company_name"]
if company:
review = list(mongo.db.review.find("company_name": company))
else:
return redirect(url_for("home"))
return render_template("home.html", review=review)
html 神社模板
<form class="serach-form" method="POST" action=" url_for('search') ">
<label class="search-bar-label" name="company-name" for="company-
name">Company Name</label>
<input type="text" id="company-name" name="company-name">
<button class="serch-button btn light-blue accent-4" type="submit"
name="action"><span>Search</span>
<i class="fas fa-sign-in-alt sign-in-icon"></i><i class="fas fa-
search search-icon"></i>
</button>
</form>
<div>
% if review|length > 0 %
% for set in review %
<strong> set.company_name </strong> <br>
<strong> set.username </strong><br>
<strong> set.score </strong><br>
<strong> set.review_content </strong><br>
% endfor %
% else %
<h3 class="red-text text-darken-4 center-align">No Results Found</h3>
% endif %
</div>
【问题讨论】:
【参考方案1】:我找到了解决方案,但我仍然不知道我编写的代码有什么问题。
python 代码
@app.route("/search", methods=["GET", "POST"])
def search():
query = request.form.get("company-name")
review = list(mongo.db.review.find(
"company_name": query))
return render_template("home.html", query=query, review=review)
html :
<div id="review-search">
% if review|length > 0 %
<h2 class="black-text text-darken-4 center-align review-search-
heading">Results for <span class="found"> query </span>
</h2>
<h3> total total_score </h3>
% for set in review %
<div class="row top-margin hot-company">
<div class="col m8 s10 offset-m2 offset-s1 grey lighten-5">
<div class="row">
<div class="col s10 offset-s1 blue-text">
<h5> set.username </h5>
</div>
</div>
<div class="row">
<div class="col s10 offset-s1 red-text">
<p> set.score /10</p>
</div>
</div>
<div class="row">
<div class="col s10 offset-s1">
<p> set.review_content </p>
</div>
</div>
</div>
</div>
% endfor %
% else %
<h2 class="red-text text-darken-4 center-align review-search-
heading">No Results Found for <span> " query "</span>
</h2>
% endif %
</div>
【讨论】:
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。【参考方案2】:使用
try:
// task1
except:
// executed when there's runtime error while doing task1
【讨论】:
感谢 apridos 非常感谢您的帮助。以上是关于在flask中提交数据时如何处理错误的主要内容,如果未能解决你的问题,请参考以下文章