在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中提交数据时如何处理错误的主要内容,如果未能解决你的问题,请参考以下文章

从 watchkit 请求数据时如何处理这个错误

合并发布者时如何处理错误?

当数据库为表中的一列返回空值时如何处理错误

使用 DataGridView 控件和 Access 数据库查询时如何处理错误?

使用to_csv时如何处理pandas内存错误?

使用模态确认删除时表的id值为null时如何处理错误?