使用Flask实现用户登录和注册

2018/10 17 17:10

Flask实现的功能:

  • 建立用户注册表单
  • 添加用户注册视图函数
  • 用户注册模板

目录结构:

目录结构

1.建立用户注册和登录表单:

from flask_wtf import
 FlaskForm
from wtforms import
 StringField, PasswordField, SubmitField, BooleanField
from wtforms.validators import
 DataRequired, Length, EqualTo, Email, ValidationError
from flask_wtf.file import
 FileField, FileAllowed, FileRequired
from app.models import
 User
from app.extensions import


 photos


# 用户注册表单
classRegisterForm(FlaskForm):

    username = StringField('用户名', validators=[DataRequired(message='用户名不能为空'), Length(6, 12, message='用户名只能在6~12个字符之间'
)])
    password = PasswordField('密码', validators=[DataRequired(message='密码不能为空'), Length(6, 20, message='密码只能在6~20个字符之间'
)])
    confirm = PasswordField('确认密码', validators=[EqualTo('password', message='两次密码不一致'
)])
    email = StringField('邮箱', validators=[Email(message='无效的邮箱格式'
)])
    submit = SubmitField('立即注册'

)

    # 自定义用户名验证器
defvalidate_username(self, field):
if
 User.query.filter_by(username=field.data).first():
            raise ValidationError('用户名已注册,请选用其它名称'

)

    # 自定义邮箱验证器
defvalidate_email(self, field):
if
 User.query.filter_by(email=field.data).first():
            raise  ValidationError('该邮箱已注册使用,请选用其它邮箱'


)


classLoginForm(FlaskForm):

    username = StringField('username', validators=[DataRequired(message='no empty'
)])
    password = PasswordField('password', validators=[DataRequired(message='no empty'
)])
    remember = BooleanField('remember me'
)
    submit = SubmitField('login')

2.__init__.py中导入表单:

from .user import RegisterForm, LoginForm
  • 1

3.添加用户注册和登录视图函数 :

from flask import
 Blueprint, render_template, flash, redirect, url_for, request, current_app
from app.forms import
 RegisterForm, LoginForm
from app.models import
 User
from app.extensions import



 db



user = Blueprint('user'


, __name__)


# 用户注册
@user.route('/register/', methods=['GET', 'POST'] )
defregister():


    form = RegisterForm()
    if
 form.validate_on_submit():
        # 根据表单数据创建用户对象




        u = User(username=form.username.data,
                 password=form.password.data,
                 email=form.email.data)
        # 将用户对象保存到数据库


        db.session.add(u)
        # 下面生成token需要用户id,此时还没有id,需要手动提交



        db.session.commit()

        # 提示用户下一步操作

        flash('注册成功'
)
        # 跳转到指定位置
return redirect(url_for('main.index'
))
    return render_template('user/register.html'



, form=form)



# 用户登录
@user.route('/login/', methods=['GET', 'POST'] )
deflogin():


    form = LoginForm()
    if
 form.validate_on_submit():
        # 根据用户名查找用户


        u = User.query.filter_by(username=form.username.data).first()
        ifnot
 u:
            flash('无效的用户名'
)
        elif
 u.verify_password(form.password.data):
            # 用户登录,顺便可以完成'记住我'的功能


            login_user(u, remember=form.remember.data)
            flash('登录成功'
)
            return redirect(request.args.get('next') or url_for('main.index'
))
        else
:
            flash('无效的密码'
)
    return render_template('user/login.html', form=form)

4.蓝本配置__init__.py文件:
注册user蓝本

# 蓝本默认配置


DEFAULT_BLUEPRINT = (
    #(蓝本,前缀)

    (main,''
),
    (user,'/user'

),

    )

4.用户注册模板 :
login.htm:
登录页面渲染的内容

{% extends 'common/base.html' %}
{% block title %}login{% endblock %}

{% block page_content %}
{{ quick_form(form) }}
{% endblock  %}

register.html:
注册页面渲染的内容

{% extends 'common/base.html'%}
{% block title%}user register{%endblock%}

{%block page_content %}
{{ quick_form(form) }}
{% endblock %}

base.html:
生成登录和注册的url链接。

<ulclass="nav navbar-nav navbar-right">

<li><ahref="{{url_for('user.login')}}">登录</a></li>
<li><ahref="{{ url_for('user.register')}}">注册</a></li>


</ul>

实现的效果图:

--转载请注明: http://91o.cc/196/

作者 - 分类 未分类

发表回复

(必填)