2012-03-23 7 views
4

FlaskとFlask-SQLAlchemy拡張を使って単純な登録フォームを作成しています。私のUserクラスでは、属性 "email"をnullable = Falseに設定していますが、電子メールを含めずにサイトのフォームをテストすると、期待どおり例外をスローするのではなく、新しいユーザーをdbに保存します。それがなぜ起こっているのか?見てくれてありがとう!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

問題は、電子メールを入力せずにWebフォームを送信したとき、それは空の文字列「」..ないなしが含まれていますが...と、空の文字列が同じではありませんが、また、フィールドに保存することもできます。

wtformsのようなものを使用してユーザーの入力を検証することをお勧めします。

+0

ああ、OKです。助けてくれてありがとう。私はwtformsを見てみましょう。 – user981023

1

あなたは、HTMLで直接電子メール属性HTML5を使用することができ判決if email != ''

-1

を追加することができます。 を参照してください。

関連する問題