Flask Data未存储到数据库中

时间:2017-04-01 16:55:17

标签: python sqlite flask

我正在创建Flask Application.Application在本地服务器上运行完美。没有错误,但数据未存储在数据库中。我想念的是什么?

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.app.py

from routes import app
app.run(debug = True)

3.forms.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.models.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)

2 个答案:

答案 0 :(得分:0)

我尝试了你的代码。数据库没有被创建。尝试这样的事情,以确保您的数据库文件在适当的位置:

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

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

答案 1 :(得分:-1)

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