Flask数据不存储到数据库

2024-03-29 13:32:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做一个烧瓶应用程序。应用程序在本地服务器上运行良好。没有错误,但数据没有存储在数据库中。我错过了什么?在

1。routes.py

from flask import Flask,render_template,request
from models import db ,User
from forms import SignupForm

app = Flask(__name__)


app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:////Database.db"
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db. init_app(app)

app.secret_key ='development_key'

@app.route('/' , methods=['GET','POST'])
def index():
    form = SignupForm() #form object 
    if request.method == 'POST':
        if form.validate() == False:
            return render_template('index.htm' , form=form)
        else:   
        #new user to be added to database   newuser = User(form.fname.data,form.lname.data,form.email.data,form.password.data)
            db.create_all()
            db.session.add(newuser)
            db.session.commit()
            return render_template('profile.htm')
    elif request.method == 'GET':                                                                   
        return render_template('index.htm',form=form)

@app.route('/aboutus')
def aboutus():
    return render_template('aboutus.htm')

@app.route('/profile')
def profile():
    return render_template('profile.htm')

@app.route('/contactus')
def contactus():
    return render_template('contactus.htm') 

2。应用程序副本

^{pr2}$

3。表单.py

from flask_wtf import FlaskForm as Form
from wtforms import StringField,PasswordField,SubmitField
from wtforms.validators import DataRequired,Email,Length

class SignupForm(Form):
    fname = StringField('First Name',validators=[DataRequired("Please Enter Your FirstName")])
    lname = StringField('Last Name',validators=[DataRequired("Please Enter Your LastName")])
    password = PasswordField('Password',validators=[DataRequired("Password Can't Be Empty"), Length(min=8,message="Password Must Be 8 character Long")])
    email = StringField('Email',validators=[DataRequired("Please Enter Your Email") , Email("Please Enter A Valid Email")]) 
    submit = SubmitField('Register')

4。模型.py

from flask_sqlalchemy import SQLAlchemy
from werkzeug import generate_password_hash, check_password_hash

db = SQLAlchemy()

class User(db.Model):
    __tablename__= "users"
    id=db.Column(db.Integer,primary_key=True)
    fname = db.Column(db.String(100))
    lname = db.Column(db.String(100))
    email = db.Column(db.String(100),unique=True)
    password = db.Column(db.String(100))

    def __init__(self,fname,lname,email,password):
        self.fname=fname
        self.lname=lname
        self.email=email
        self.set_password(password)

    def set_password(self,password):
        self.password=generate_password_hash(password)

    def check_password(self,password):
        return check_password_hash(self.password,password)

Tags: fromimportselfformappdbreturnemail
2条回答

不要将sqlite3用于生产目的,而是使用postgresql,因为sqlite3适用于本地机器,并且在在线服务器上不能很好地工作,因为在heroku托管平台上,数据库至少每24小时重置一次,您甚至可以检查以下链接https://devcenter.heroku.com/articles/sqlite3虽然您没有提到使用heroku,但我仍然建议这样做,因为heroku是非常常见的托管场所。在

我试过你的密码。数据库未被创建。请尝试类似这样的操作,以确保数据库文件位于正确的位置:

import os
basedir = os.path.abspath(os.path.dirname(__file__))

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'Database.db')

相关问题 更多 >