1, add a user registration form
app / auth / forms.py user registration form
Regexp form uses verification function WTForms provided to ensure that username field contains only letters, numbers, underscores, and that this validation function regular expression The last two parameters are displayed when the error flag and verification fails regex news
from flask_wtf import Form
from wtforms import StringField, PasswordField, BooleanField, SubmitField, validators, ValidationError
from wtforms.validators import Length, Email, Required, Regexp, EqualTo
from ..models import User
class RegistrationFrom(Form): email = StringField('Email', validators=[Required(), Length(1, 64), Email()]) username = StringField('Username', validators=[Required(), Length(1, 64), Regexp('^[A-Za-z][A-Za-z0-9_.]*$', 0, 'Usernames, dots or underscores')]) password = PasswordField('Password', validators=[Required(), EqualTo('password2', message='Passwords must match.')]) password2 = PasswordField('Confirm password', validators=[Required()]) submit = SubmitField('Register') def validate_mail(selfself, field): if User.query.filter_by(email=field.data).first(): raise ValidationError('Eamil already registered') def validate_username(self, field): if User.query.filter_by(username=field.data).frist(): raise ValidationError('Username already in use.')
2, displays the login form
app/templates/auth/register.html
{% extends "base.htmml" %} {% import "bootstrap/wtf.html" as wtf %} {% block title %}Flasky - Register {% endblock %} {% block page_content %} <div class="page-header"> <h1>Register</h1> </div> <div class="col-md-4"> {{ wtf.quick_form(form) }} </div> {% endblock %}
3, the link to the registration page
app/templates/auth/login.html
Log page to display a link to the registration page, so users do not have accounts can easily find the registration page
{% extends "base.html" %} {% import "bootstrap/wtf.html" as wtf %} {% block title %}Flasky - Login{% endblock %} {% block page_content %} <div class="page-header"> <h1>Login</h1> </div> <div class="col-md-4"> {{ wtf.quick_form(form) }} <p>New user? <a href="{{ url_for('auth.register') }}">Click here to register</a>.</p> </div> {% endblock %}
New Registration
1, registered users route
app/auth/views.py
Submit the registration form, after verification by, the system will add a user to a database using the user fill out information
from flask import render_template, redirect, request, url_for, flash from flask_login import login_user, login_required, logout_user from . import auth from ..models import User,db from .forms import LoginForm,RegistrationFrom #蓝本中的路由和视图函数 @auth.route('/login', methods=['GET', 'POST']) def login(): form = LoginForm() if form.validate_on_submit(): user = User.query.filter_by(email=form.email.data).first() if user is not None and user.verify_password(form.password.data): login_user(user, form.remeber_me.data) return redirect(request.args.get('next') or url_for('main.index')) flash('Invalid username or password.') return render_template('auth/login.html', form=form) #登出用户 @auth.route('/logout') @login_required def logout(): logout_user() flash('You have been logged out.') return redirect(url_for('main.index')) #用户注册路由 @auth.route('/register', methods=['GET', 'POST']) def register(): form = RegistrationFrom() if form.validate_on_submit(): user = User(email=form.email.data, username=form.username.data, password=form.password.data) db.session.add(user) flash('You can now login.') return redirect(url_for('auth.login')) return render_template('auth/register.html', form=form)