Flask实战第44天:完成前台注册功能

注册功能后端逻辑

用户注册要把注册的表单提交上来,因此,我要先对表单进行验证,编辑front.forms

from apps.forms import BaseForm
from wtforms import StringField
from wtforms.validators import Regexp, Length, EqualTo, ValidationError
from utils import xcache
from .models import FrontUser


class SignUpForm(BaseForm):
    telephone = StringField(validators=[Regexp(r'1[35678]\d{9}', message='手机号码格式错误')])
    sms_captcha = StringField(validators=[Regexp(r'\w{6}', message='短信验证码错误')])
    username = StringField(validators=[Length(2,20, message='用户名格式错误')])
    password1 = StringField(validators=[Length(5, 30, message='密码格式错误')])
    password2 = StringField(validators=[EqualTo('password1', message='两次密码不一致')])
    graph_captcha = StringField(validators=[Regexp(r'\w{4}', message='图形验证码错误')])

    def validate_telephone(self, field):
        user = FrontUser.query.fileter_by(telephone=field).first()
        if user:
            raise ValidationError('该手机号已被注册')
    
    def validate_sms_captcha(self, field):
        telehone = self.telephone.data
        sms_captcha = field.data
        sms_captcha_mem = xcache.get(telehone)
        if not sms_captcha_mem or sms_captcha_mem != sms_captcha:
            ValidationError(message='短信验证码错误')

    def validate_graph_captcha(self, field):
        graph_captcha = field.data
        #因为图形验证码存储的key和值都是一样的,所以我们只要判断key是否存在就行
        if not xcache.get(graph_captcha):
            ValidationError(message='图形验证码错误')
front.forms.py

然后就是注册的视图处理POST请求了, 编辑front.views.py

class SignUpViews(views.MethodView):
    def get(self):
        return render_template('front/front_signup.html')

    def post(self):
        signup_form = SignUpForm(request.form)
        if signup_form.validate():
            telephone = signup_form.telephone.data
            username = signup_form.username.data
            password = signup_form.password1.data
            user = FrontUser(telephone=telephone, username=username, password=password)
            db.session.add(user)
            db.sessioncommit()
            return xjson.json_success('恭喜您,注册成功')
        else:
            return xjson.json_param_error(signup_form.get_error())

注册功能前端逻辑

111

注册完成跳转回上一个页面

111

猜你喜欢

转载自www.cnblogs.com/sellsa/p/9501352.html