2012-03-23 2 views
4

간단한 등록 양식을 만들기 위해 Flask와 Flask-SQLAlchemy 확장을 사용하고 있습니다. 내 User 클래스에서 "email"속성이 nullable = False로 설정되어 있지만 전자 메일을 포함하지 않고 사이트의 양식을 테스트 할 때 예상대로 예외를 throw하는 대신 새 사용자를 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

문제는 당신이 이메일을 입력하지 않고 웹 양식을 제출 때 ..하지 없음을 빈 문자열 ""를 포함하지 않습니다 ... 그리고 빈 문자열이 동일하지 않습니다이다 알 수 없으며 필드에 저장하는 것이 좋습니다.

wtforms와 같은 것을 사용하여 사용자 입력의 유효성을 검사하는 것이 좋습니다.

+0

아, 알겠습니다. 도와 주셔서 감사합니다. wtforms를 살펴 보겠습니다. – user981023

1

당신은 당신이 HTML로 직접 이메일을 속성 HTML5를 사용할 수있는 판단 if email != ''

-1

를 추가 할 수 있습니다. 을 참조하십시오.