首页 > 解决方案 > 将数据库添加到 Flask 应用程序后未显示索引页面

问题描述

创建数据库模型后,我正在创建一个应用程序。它没有给出任何错误,但是在添加了db.commit()inindex路由后,它没有显示索引页面,而是显示了其他页面而没有任何错误。我提供了错误图像的链接。我不明白我做错了什么。

app.py->

from flask import Flask , render_template, request, jsonify
from flask_sqlalchemy import SQLAlchemy
import datetime as dt
from flask_marshmallow import Marshmallow

#app config
app=Flask(__name__)
app.config['SECRET_KEY']="ASGH}|#%*9"
app.config['SQLALCHEMY_DATABASE_URI']="sqlite:///site.db"

#db
db=SQLAlchemy(app)
ma=Marshmallow(app)

#model
class contact(db.Model):
    id= db.Column(db.Integer, primary_key="True")
    name= db.Column(db.String(30), nullable=False)
    mobile= db.Column(db.Integer, unique=True, nullable=False)
    email= db.Column(db.String(45), nullable=False)
    company_name= db.Column(db.String(30), nullable=False)
    subject= db.Column(db.String(45), nullable=False)
    message= db.Column(db.Text, nullable=False)
    date_posted= db.Column(db.DateTime, nullable=False, default=dt.datetime.now())

class ContactSchema(ma.Schema):
    class Meta:
        fields=("id","name","mobile","email","company_name","subject","message","date_posted")

 cnt_schema= ContactSchema()
 cnts_schema= ContactSchema(many=True)

 #pages
 @app.route("/", methods=['GET', 'POST'])
 def index():
     if request.method == "POST":
         name= request.form.get("Name")
         mobile= request.form.get("mobile")
         email= request.form.get("email")
         cmp_nm= request.form.get("c_name")
         sub= request.form.get("subject")
         msg= request.form.get("msg")
   
         #storing into db
         cnt= contact(name,mobile,email,cmp_nm,sub,msg)
         db.session.add(cnt)
         db.session.commit()
         #alter box required
   return render_template("index.html")

templates/index.html->

{% extends "layout.html" %}
{% block title %} {% endblock %}
{% block body %}

<div class="container md:mx-auto">
<h3>Contact</h3>
<div class="row">
    <form class="col s12" action="{{ url_for("app")}}" method="post">
    <div class="row">
        <div class="input-field col s6">
        <i class="material-icons prefix">account_circle</i>
        <input id="icon_prefix" name="Name" type="text" class="validate">
        <label for="icon_prefix">Name</label>
        </div>
        <div class="input-field col s6">
        <i class="material-icons prefix">phone</i>
        <input id="icon_telephone" name="mobile" type="tel" class="validate">
        <label for="icon_telephone">Telephone</label>
        </div>
    </div>
    <div class="row">
        <div class="input-field col s6">
        <i class="material-icons prefix">email</i>
        <input id="icon_email" name="email" type="tel" class="validate">
        <label for="icon_email">Email</label>
        </div>
        <div class="input-field col s6">
        <i class="material-icons prefix">business</i>
        <input id="icon_business" name="c_name" type="tel" class="validate">
        <label for="icon_business">Company Name</label>
        </div>
    </div>
    <div class="row">
        <div class="input-field col s6">
        <i class="material-icons prefix">mode_edit</i>
        <input id="icon_prefix2" name="subject" type="text" class="validate">
        <label for="icon_prefix2">Subject</label>
        </div>
        <div class="input-field col s6">
        <i class="material-icons prefix">keyboard</i>
        <textarea id="textarea1" name="msg" class="materialize-textarea"></textarea>
        <label for="icon_keyboard">Message</label>
        </div>
    </div>
    <button class="btn waves-effect waves-light" type="submit" name="action">Submit
    <i class="material-icons right">send</i>
    </button>
    </form>
    </div>
</div>
{% endblock %}

添加数据库后,这是我得到的异常:1 , 2

我该如何解决?

标签: pythonflasksqlalchemy

解决方案


templates/index.html你犯了一个错误:

<form class="col s12" action="{{ url_for("app")}}" method="post">

应该 :

<form class="col s12" action="{{ url_for("index")}}" method="post">

推荐阅读