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.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天:完成前台注册功能的更多相关文章
- WordPress添加前台注册功能
一.添加注册表单 1.首先在当前主题的目录下新建一个php文件,命名为reg-page.php,然后将page.php中的所有代码复制到reg-page.php中: 2.删除reg-page.php开 ...
- Flask实战第38天:前台模型创建
安装shortuuid pip install shortuuid 编辑front.models.py from exts import db import shortuuid from werkze ...
- Flask实战第58天:发布帖子功能完成
发布帖子后台逻辑完成 首先给帖子设计个模型,编辑apps.models.py class PostModel(db.Model): __tablename__ = 'post' id = db.Col ...
- Django学习笔记第六篇--实战练习二--简易实现登录注册功能demo
一.绪论: 简易实现登录功能demo,并没有使用默认身份验证模块,所以做的也很差,关闭了csrf保护,没有认证处理cookie和session,只是简单实现了功能.另外所谓的验证码功能是伪的. 二. ...
- Flask实战-留言板-安装虚拟环境、使用包组织代码
Flask实战 留言板 创建项目目录messageboard,从GreyLi的代码中把Pipfile和Pipfile.lock文件拷贝过来,这两个文件中定义了虚拟环境中需要安装的包的信息和位置,进入m ...
- 一百一十三:CMS系统之前台注册界面
html {% from 'common/_macros.html' import static %}<!DOCTYPE html><html lang="en" ...
- 学习MVC之租房网站(八)- 前台注册和登录
在上一篇<学习MVC之租房网站(七)-房源管理和配图上传>完成了在后台新增.编辑房源信息以及上传房源配图的功能.到此后台开发便告一段落了,开始实现前台的功能,也是从用户的登录.注册开始. ...
- 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(五)——实现注册功能
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...
- flask 开发用户登录注册功能
flask 开发用户登录注册功能 flask开发过程议案需要四个模块:html页面模板.form表单.db数据库操作.app视图函数 1.主程序 # app.py # Auther: hhh5460 ...
随机推荐
- idea 修改静态资源不需要重启的办法
快捷键Ctrl + Alt + S打开设置面板,勾选Build project automatically选项: 快捷键Ctrl + Shift + A查找registry命令: 在查找到的regis ...
- python dlib 面部轮廓实时检测
1.dlib 实现动态人脸检测及面部轮廓检测 模型下载连接 : http://dlib.net/files/ # coding:utf-8 import cv2 import os import dl ...
- 禁用 Cortana 的解决办法
1. GPedit.msc 2. 然后在本地组策略编辑器中,点击“用户配置”中的“管理模版”,接着双击右侧的“Windows 组件”. 3. 下拉滚动条,并找到“文件资源管理器”,双击进入. 找到“在 ...
- skb管理函数之skb_clone、pskb_copy、skb_copy
skb_clone--只复制skb描述符本身,如果只修改skb描述符则使用该函数克隆: pskb_copy--复制skb描述符+线性数据区域(包括skb_shared_info),如果需要修改描述符以 ...
- Laravel 5.2 三、中间件、视图与 Blade 模板引擎
一.中间件 Laravel 的 HTTP 中间件提供了对路由的一层过滤和保护.下面模拟一下用中间件验证后台登录. 1. 创建中间件 cmd 窗口进入项目目录,使用 artisan 命令创建 php a ...
- 终于解决了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 ...
- 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 ...
- xtraTabControl学习
winform 首先是动态添加page面,并且在page页面上添加一个form窗体 DevExpress.XtraTab.XtraTabPage page = new DevExpress.XtraT ...
- java.lang.ClassCastException: org.springframework.web.filter.CharacterEncodingFilter cannot be cast
严重: Exception starting filter encodingFilterjava.lang.ClassCastException: org.springframework.web.fi ...
- awk处理之案例六:awk根据条件插入文本
编译环境 本系列文章所提供的算法均在以下环境下编译通过. [脚本编译环境]Federa 8,linux 2.6.35.6-45.fc14.i686 [处理器] Intel(R) Core(TM)2 Q ...