2012-03-23 3 views
4

Я возился с флягой и расширением 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

Проблема заключается в том, когда вы представить веб-форму без ввода электронной почты не будет содержать пустую строку «» .. нет None ... и пустая строка не совпадает als null, и это нормально хранить в поле.

Я предлагаю использовать что-то вроде wtforms для проверки ввода пользователя.

+0

Ах, хорошо. Спасибо за помощь. Я посмотрю на wtforms. – user981023

1

Вы можете добавить суждение if email != ''

-1

вы можете использовать html5 атрибут электронной почты непосредственно в HTML. См. this.