簡體   English   中英

如何在我的注冊表單上驗證電子郵件和用戶名。 我正在使用燒瓶和 mysqlalchemy

[英]How can I validate email and username on my registration form. I am using flask and mysqlalchemy

這是我的路線,它很有用,問題是我可以多次注冊同一個用戶:

@app.route('/register', methods=['GET', 'POST'])
def register():
    if request.method == 'POST':
        name = request.form.get('name')
        username = request.form.get('username')
        email = request.form.get('email')
        password = request.form.get('password')
        confirm = request.form.get('confirm')
        secure_password = sha256_crypt.encrypt(str(password))

        if password == confirm:
            db.execute('INSERT INTO users(name, username, email, password) VALUES(:name,:username,:email,:password)',
                                           {'name':name,'username':username,'email':email,'password':secure_password})
            db.commit()
            flash("you are registerd and you can login","success")
            return redirect(url_for('login'))
        else:
            flash("password does not match","danger")
            return render_template('register.html')

    return render_template('register.html')

查詢您的數據庫以查看用戶名或電子郵件是否已被其他用戶使用。 假設您的數據庫名為users ,以下是驗證電子郵件或用戶名的方法:

email = request.form.get("email")
user = users.query.filter(users.email==email).first()
if user != None: # the query has returned a user
    flash("Please use a different email.")
    return render_template("register.html")

對您的用戶名、姓名或任何您想要獨一無二的內容執行相同的操作。

unique=True添加到需要唯一的數據庫模型列可能是個好主意,以確保即使您的驗證沒有發現錯誤,也不可能在數據庫中輸入重復項.

@auth.route('/signup', methods=['POST'])
def signup_post():
    email = request.form.get('email')
    firstname = request.form.get('first_name')
    lastname = request.form.get('last_name')
    phone = request.form.get('phone')
    password = request.form.get('password')
    re_password = request.form.get('password1')
    created_date = date.today()
    if re_password != password:
        flash("Not same password, please check again!")
    else:
        user = User.query.filter_by(
            email=email).first()  # if this returns a user, then the email already exists in database
        if user:  # if a user is found, we want to redirect back to signup page so user can try again
            return redirect(url_for('auth.signup'))
        else:
            # create a new user with the form data. Hash the password so the plaintext version isn't saved.
            new_user = User(email=email, phone=phone,created_date=created_date, firstname=firstname, lastname=lastname, password=generate_password_hash(password, method='sha256'))
            # add the new user to the database
            db.session.add(new_user)
            db.session.commit()
            return redirect(url_for('auth.login'))
    return redirect(url_for('auth.login'))

所以如果你想檢查用戶名,你可以使用代碼

user = User.query.filter_by(
            username=username).first()
if user:  # if a user is found, we want to redirect back to signup page so user can try again
            return redirect(url_for('auth.signup'))
        else:


CONTINUE TODO SOMETHING
   

我認為你應該為 SQLAlchemy 制作短代碼

db = SQLAlchemy()

和用戶Flask-Login ,並創建模型。

class User(UserMixin, db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)  # primary keys are required by SQLAlchemy
    firstname = db.Column(db.String(30))
    lastname = db.Column(db.String(30))
    email = db.Column(db.String(100), unique=True)
    phone = db.Column(db.String(10))
    password = db.Column(db.String(20))

你可以在這里看到完整的荷蘭盾

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM