前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BBS论坛(十四)

BBS论坛(十四)

作者头像
zhang_derek
发布2019-02-13 16:05:12
4.9K0
发布2019-02-13 16:05:12
举报
文章被收录于专栏:有趣的django有趣的django

14.1注册完成跳到上一个页面

(1)front/form.py

代码语言:javascript
复制
# front/forms.py
__author__ = 'derek'

from ..forms import BaseForm
from wtforms import StringField
from wtforms.validators import Regexp,ValidationError,EqualTo
from utils import zlcache

class SignupForm(BaseForm):
    telephone=StringField(validators=[Regexp(r'1[3578]\d{9}',message='请输入正确格式的手机号码')])
    sms_captcha=StringField(validators=[Regexp(r'\w{4}',message='请输入四位短信验证码')])
    username=StringField(validators=[Regexp(r'.{3,15}',message='用户名长度在3-15位之间')])
    password=StringField(validators=[Regexp(r'[0-9a-zA-Z_\.]{6,15}',message='请输入正确格式的密码')])
    password2=StringField(validators=[EqualTo('password',message='两次输入的密码不一致')])
    graph_captcha=StringField(validators=[Regexp(r'\w{4}',message='图形验证码不正确')])

    def validate_sms_captcha(self,field):
        # 必须传入的参数self,field
        # 使用fields.data和使用self.sms_captcha.data是一样的

        sms_captcha=field.data
        telephone=self.telephone.data
        if sms_captcha != '1111':
            sms_captcha_mem=zlcache.get(telephone)
            if not sms_captcha_mem or sms_captcha_mem.lower() != sms_captcha.lower():
                raise ValidationError(message='短信验证码错误')

    def validate_graph_captcha(self,field):
        graph_captcha=field.data
        if graph_captcha != '1111':
            graph_captcha_mem=zlcache.get(graph_captcha.lower())
            if not graph_captcha_mem:
                raise ValidationError(message='图形验证码错误')

(2)utils/safeutils.py

代码语言:javascript
复制
from urllib.parse import urlparse,urljoin
from flask import request

def is_safe_url(target):
    ref_url = urlparse(request.host_url)
    test_url = urlparse(urljoin(request.host_url, target))
    return test_url.scheme in ('http', 'https') and \
           ref_url.netloc == test_url.netloc

(3)front/views.py

代码语言:javascript
复制
class SignupView(views.MethodView):
    def get(self):
        return_to = request.referrer
        if return_to and return_to != request.url and safeutils.is_safe_url(return_to):
            return render_template('front/signup.html', return_to=return_to)
        else:
            return render_template('front/signup.html')

    def post(self):
        form = SignupForm(request.form)
        if form.validate():
            telephone = form.telephone.data
            username = form.username.data
            password = form.password.data
            user = FrontUser(telephone=telephone, username=username, password=password)
            db.session.add(user)
            db.session.commit()
            return restful.success()
        else:
            print(form.get_error())
            return restful.params_error(message=form.get_error())

(4)front/signup.html

代码语言:javascript
复制
<div class="form-group">
                <span style="display: none" id="return-to-span">{{ return_to }}</span>
                <button id="submit-btn" class="btn btn-warning btn-block">立即注册</button>
            </div>

(6)front/signup.js

代码语言:javascript
复制
$(function () {
    $('#submit-btn').on('click', function () {
        var telephone_input = $('input[name=telephone]');
        var sms_captcha_input = $('input[name=sms_captcha]');
        var username_input = $('input[name=username]');
        var password_input = $('input[name=password1]');
        var password2_input = $('input[name=password2]');
        var graph_captcha_input = $('input[name=graph_captcha]');

        var telephone = telephone_input.val();
        var sms_captcha = sms_captcha_input.val();
        var username = username_input.val();
        var password = password_input.val();
        var password2 = password2_input.val();
        var graph_captcha = graph_captcha_input.val();

        zlajax.post({
            'url': '/signup/',
            'data': {
                'telephone': telephone,
                'sms_captcha': sms_captcha,
                'username': username,
                'password': password,
                'password2': password2,
                'graph_captcha': graph_captcha
            },
            'success': function (data) {
                if (data['code'] == 200) {
                    var return_to = $('#return-to-span').text();
                    if (return_to) {
                        window.location = return_to
                    } else {
                        window.location = '/'
                    }
                } else {
                    zlalert.alertInfoToast(data['message']);
                }
            },
            'fail': function () {
                zlalert.alertNetworkError();
            }
        });
    });
});
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-06-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 14.1注册完成跳到上一个页面
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档