2012-03-23 85 views
4

我搞亂了Flask和Flask-SQLAlchemy擴展以創建一個簡單的註冊表單。在我的User類中,我將屬性「email」設置爲nullable = False,但是當我在網站上測試表單而未包含電子郵件時,它會將新用戶保存到數據庫,而不是像我期望的那樣拋出異常。任何想法爲什麼發生這種情況?感謝您的期待!Flask-SQLAlchemy nullable = False

下面的代碼:

from flask import Flask, url_for, render_template, request, redirect 
from flaskext.sqlalchemy import SQLAlchemy 

app = Flask(__name__) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/kloubi.db' 
db = SQLAlchemy(app) 

class User(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    username = db.Column(db.String(80), unique=True) 
    email = db.Column(db.String(80), unique=True, nullable=False) 
    fname = db.Column(db.String(80)) 
    lname = db.Column(db.String(80)) 

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

@app.route('/') 
def index(): 
    return render_template('index.html') 

@app.route('/register/', methods=['GET', 'POST']) 
def register(): 
    if request.method == 'POST': 
     new_user = User(fname = request.form['name'], 
         lname = request.form['surname'], 
         email = request.form['email'], 
         username = request.form['username']) 
     db.session.add(new_user) 
     db.session.commit() 
     return redirect(url_for('index')) 
    return render_template('register.html') 

if __name__ == '__main__': 
    app.debug = True 
    app.run(host='0.0.0.0') 

回答

13

問題是,當你提交的網頁表單,而無需輸入一個電子郵件它將包含一個空字符串「」 ..不無...和一個空字符串是不一樣的als爲空,可以將其存儲在現場。

我建議使用類似wtforms的東西來驗證用戶的輸入。

+0

啊,好的。謝謝您的幫助。我會看看wtforms。 – user981023 2012-03-23 23:40:45

1

您可以添加一個判斷if email != ''

-1

你可以使用HTML5直接在HTML屬性的電子郵件。見this

相關問題