注册功能后端逻辑

用户注册要把注册的表单提交上来,因此,我要先对表单进行验证,编辑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.filter_by(telephone=field.data).first()
if user:
raise ValidationError('该手机号已被注册') def validate_sms_captcha(self, field):
telephone = self.telephone.data
sms_captcha = field.data
xcache.set('', 'heboan')
sms_captcha_mem = xcache.get(telephone)
print('用户输入的验证码:{}'.format(sms_captcha))
print( '服务器存储的验证码:{}'.format(sms_captcha_mem))
if not sms_captcha_mem or sms_captcha_mem != sms_captcha:
raise ValidationError(message='短信验证码错误') def validate_graph_captcha(self, field):
graph_captcha = field.data
#因为图形验证码存储的key和值都是一样的,所以我们只要判断key是否存在就行
if not xcache.get(graph_captcha.lower()):
raise ValidationError(message='图形验证码错误')

front.views.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.session.commit()
return xjson.json_success('恭喜您,注册成功')
else:
return xjson.json_param_error(signup_form.get_error())

注册功能前端逻辑

前端我们通过ajax来请求,编辑front_signup.js

...
//注册
$(function () {
$('#submit-btn').click(function (event) {
event.preventDefault();
var telephone_input = $("input[name='telephone']");
var sms_captcha_input = $("input[name='sms_captcha']");
var username_input = $("input[name='username']");
var password1_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 password1 = password1_input.val();
var password2 = password2_input.val();
var graph_captcha = graph_captcha_input.val(); bbsajax.post({
'url': '/signup/',
'data': {
'telephone': telephone,
'sms_captcha': sms_captcha,
'username': username,
'password1': password1,
'password2': password2,
'graph_captcha': graph_captcha
},
'success': function (data) {
if (data['code'] === 200){
//注册成功跳转到首页
window.location = '/';
}else{
xtalert.alertInfo(data['message']);
}
},
'fail': function (error) {
xtalert.alertNetworkError();
} });
})
});

这样注册功能就OK,注册成功后会跳转到首页。

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

现在我们的需求是,用户直接进入注册页面注册,则注册成功后跳到首页,如果从本站的其他页面访问到注册页面注册,则注册成功后跳转到上一个页面。

那么我们可以在注册的视图函数中的get请求获取到referrer(上个页面,也就是从哪个页面跳过来的url)

#写一个检测referre的函数放到safeutils.py中,该文件放到utils下面
from utils import safeutils class SignUpViews(views.MethodView):
def get(self):
#获取上一个页面的url
return_to = request.referrer
#referrer不一定会存在,比如直接访问的登录页面
#并且它不等于登录页面的url
#并且这个referre是个安全的url,防止恶意者去伪造它,被跳转到其它恶意的网站
if return_to and return_to !=request.url and safeutils.is_safe_url(return_to):
#把这个url传入到模板中
return render_template('front/front_signup.html', return_to=return_to)
return render_template('front/front_signup.html') ...
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

safeutils.py

url传入到frony_signup.html,我在这个页面找个位置接收它

<span style="display:none;" id="return-to-span">{{ return_to }}</span>

然后我们的js就可以获取到这个值,编辑front_signup.js

Flask实战第44天:完成前台注册功能的更多相关文章

  1. WordPress添加前台注册功能

    一.添加注册表单 1.首先在当前主题的目录下新建一个php文件,命名为reg-page.php,然后将page.php中的所有代码复制到reg-page.php中: 2.删除reg-page.php开 ...

  2. Flask实战第38天:前台模型创建

    安装shortuuid pip install shortuuid 编辑front.models.py from exts import db import shortuuid from werkze ...

  3. Flask实战第58天:发布帖子功能完成

    发布帖子后台逻辑完成 首先给帖子设计个模型,编辑apps.models.py class PostModel(db.Model): __tablename__ = 'post' id = db.Col ...

  4. Django学习笔记第六篇--实战练习二--简易实现登录注册功能demo

    一.绪论: 简易实现登录功能demo,并没有使用默认身份验证模块,所以做的也很差,关闭了csrf保护,没有认证处理cookie和session,只是简单实现了功能.另外所谓的验证码功能是伪的. 二. ...

  5. Flask实战-留言板-安装虚拟环境、使用包组织代码

    Flask实战 留言板 创建项目目录messageboard,从GreyLi的代码中把Pipfile和Pipfile.lock文件拷贝过来,这两个文件中定义了虚拟环境中需要安装的包的信息和位置,进入m ...

  6. 一百一十三:CMS系统之前台注册界面

    html {% from 'common/_macros.html' import static %}<!DOCTYPE html><html lang="en" ...

  7. 学习MVC之租房网站(八)- 前台注册和登录

    在上一篇<学习MVC之租房网站(七)-房源管理和配图上传>完成了在后台新增.编辑房源信息以及上传房源配图的功能.到此后台开发便告一段落了,开始实现前台的功能,也是从用户的登录.注册开始. ...

  8. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(五)——实现注册功能

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  9. flask 开发用户登录注册功能

    flask 开发用户登录注册功能 flask开发过程议案需要四个模块:html页面模板.form表单.db数据库操作.app视图函数 1.主程序 # app.py # Auther: hhh5460 ...

随机推荐

  1. idea 修改静态资源不需要重启的办法

    快捷键Ctrl + Alt + S打开设置面板,勾选Build project automatically选项: 快捷键Ctrl + Shift + A查找registry命令: 在查找到的regis ...

  2. python dlib 面部轮廓实时检测

    1.dlib 实现动态人脸检测及面部轮廓检测 模型下载连接 : http://dlib.net/files/ # coding:utf-8 import cv2 import os import dl ...

  3. 禁用 Cortana 的解决办法

    1. GPedit.msc 2. 然后在本地组策略编辑器中,点击“用户配置”中的“管理模版”,接着双击右侧的“Windows 组件”. 3. 下拉滚动条,并找到“文件资源管理器”,双击进入. 找到“在 ...

  4. skb管理函数之skb_clone、pskb_copy、skb_copy

    skb_clone--只复制skb描述符本身,如果只修改skb描述符则使用该函数克隆: pskb_copy--复制skb描述符+线性数据区域(包括skb_shared_info),如果需要修改描述符以 ...

  5. Laravel 5.2 三、中间件、视图与 Blade 模板引擎

    一.中间件 Laravel 的 HTTP 中间件提供了对路由的一层过滤和保护.下面模拟一下用中间件验证后台登录. 1. 创建中间件 cmd 窗口进入项目目录,使用 artisan 命令创建 php a ...

  6. 终于解决了Linux下运行OCCI程序一直报Error while trying to retrieve text for error ORA-01804错误

    终于解决了Linux下运行OCCI程序一直报Error while trying to retrieve text for error ORA-01804错误 http://blog.csdn.net ...

  7. how to create view (windows)

    View Server List  IP address: 200.xx.xx.xx How to create a new view ssh new view server by your Unix ...

  8. xtraTabControl学习

    winform 首先是动态添加page面,并且在page页面上添加一个form窗体 DevExpress.XtraTab.XtraTabPage page = new DevExpress.XtraT ...

  9. java.lang.ClassCastException: org.springframework.web.filter.CharacterEncodingFilter cannot be cast

    严重: Exception starting filter encodingFilterjava.lang.ClassCastException: org.springframework.web.fi ...

  10. awk处理之案例六:awk根据条件插入文本

    编译环境 本系列文章所提供的算法均在以下环境下编译通过. [脚本编译环境]Federa 8,linux 2.6.35.6-45.fc14.i686 [处理器] Intel(R) Core(TM)2 Q ...