给提交按钮加一个id,方便写js

js

//发送ajax请求注册请求
$(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(); ajax.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 () {
xtalert.alertNetworkError();
}
});
});
});

form

from ..forms import BaseForm
from wtforms import StringField
from wtforms.validators import Regexp, EqualTo, ValidationError
from utils import cmscache class SignupForm(BaseForm):
telephone = StringField(validators=[Regexp(r'1[345789]\d{9}', message='手机号不合法')])
sms_captcha = StringField(validators=[Regexp(r'\w{4}', message='短信验证码不合法')])
username = StringField(validators=[Regexp(r'.{2,20}', message='用户名不合法')])
password1 = StringField(validators=[Regexp(r'[0-9a-zA-Z_\.]{6,20}', message='密码不合法')])
password2 = StringField(validators=[EqualTo('password1', message='两次密码不一致')])
graph_captcha = StringField(validators=[Regexp(r'\w{4}', message='图形验证码不合法')]) def validate_sms_captcha(self, field):
""" 短信验证码 """
sms_captcha = field.data
telephone = self.telephone.data
sms_captcha_mem = cmscache.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
graph_captcha_mem = cmscache.get(graph_captcha.lower())
if not graph_captcha_mem:
raise ValidationError(message='图形验证码错误')

视图

from flask import Blueprint, views, render_template, request
from .forms import SignupForm
from utils import restful
from .models import FrontUser
from exts import db bp = Blueprint("front", __name__) @bp.route('/')
def index():
return 'front index' class SignupView(views.MethodView): def get(self):
return render_template('front/front_signup.html') def post(self):
form = SignupForm(request.form)
if form.validate():
telephone = form.telephone.data
username = form.username.data
password = form.password1.data
user = FrontUser(telephone=telephone, username=username, password=password)
db.session.add(user)
db.session.commit()
return restful.success(message='注册成功')
else:
return restful.params_error(message=form.get_error()) bp.add_url_rule('/signup/', view_func=SignupView.as_view('signup'))

执行注册

数据库

一百二十:CMS系统之注册功能前后端逻辑的更多相关文章

  1. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十四 ║ VUE 计划书 & 我的前后端开发简史

    ---新内容开始--- 番外 大家周一好呀,又是元气满满的一个周一呀!感谢大家在周一这个着急改Bug的黄金时期,抽出时间来看我的博文哈哈哈,时间真快,已经到第十四篇博文了,也很顺顺(跌跌)利利 (撞撞 ...

  2. VUE开发(二)nginx配合vue来实现前后端分离部署

    一.引言 由于本地是采用vue+spring boot实现的前后端分离项目,本机启动的时候先启动后场服务,再单独启动vue工程,然后可以实现全流程贯穿,但是我们要部署到服务器上的时候,一般都是打一个j ...

  3. 前后端分离项目(十一):实现"删"功能(前后端)

    好家伙,本篇介绍如何实现"删"功能 来看效果,  数据库 (自然是没什么毛病) "增"搞定了,其实"删"非常简单 (我不会告诉你我是为了水一 ...

  4. 一百二十八:CMS系统之轮播图的编辑和删除功能

    编辑 form,继承添加的form 视图 @bp.route('/ubanners/', methods=['POST'])@login_required@permission_required(CM ...

  5. 一百二十四:CMS系统之首页导航条和代码抽离

    模板抽离 由于前后台的模板有些需要的元素如,js,css是相同的,这里抽离出来做base模板 {% from "common/_macros.html" import static ...

  6. 一百二十一:CMS系统之注册后跳转到上一个页面

    实现功能,访问测试页面的时候,跳转到注册页面,注册成功后跳转到测试页面 使用参数:若是从其他地址跳转过来时,头部信息中会携带参数referrer,此参数为从从哪个地址跳转到当前地址的,若是直接从浏览器 ...

  7. 一百二十六:CMS系统之轮播图管理页面布局和添加轮播图的模态对话框制作

    视图 @bp.route('/banners/')@login_required@permission_required(CMSPersmission.POSTER)def banners(): re ...

  8. 一百二十二:CMS系统之页面抽离和登录页面

    将登录和注册需要的共性标签抽离出来做父模板 将css改名为base base模板 {% from 'common/_macros.html' import static %}<!DOCTYPE ...

  9. 一百三十二:CMS系统之前端动态获取后台添加的轮播图

    先准备几张轮播图 排序顺序改为根据优先级倒序排 前端首页接口 @bp.route('/')def index(): banners = BannerModel.query.order_by(Banne ...

随机推荐

  1. sklearn--模型的评价

    sklearn.metrics 1.MSE(均方误差)和RMSE(均方根误差),以及score() lr.score(test_x,test_y)#越接近1越好,负的很差 from sklearn.m ...

  2. SELinux 了解及CentOS7 中 semanage命令的安装

    SELinux 安全子系统 SELinux(Security-Enhanced Linux)是美国国家安全局在Linux开源社区的帮助下开发的一个强制访问控制(MAC,Mandatory Access ...

  3. CentOS7 解决不能切换中英文输入法的问题

    1. 运行 im-chooser(如果没有要先安装) $ im-chooser 2. 在打开的窗口选择 iBus,然后 Logout 再 Login, 输入法即可切换.

  4. 01 数据库sql

    1, 关于mysql,常去的地方有:https://www.yiibai.com/mysql, http://tool.oschina.net/apidocs/apidoc?api=mysql-5.1 ...

  5. layui多图上传实现删除功能

    在使用layui的多图上传时发现没有删除功能 在网上搜索解决办法时有的感觉太复杂有的不符合自己所需要的所以就自己动手 下面附上代码 HTML: <div class="layui-up ...

  6. JavaScript 基础知识梳理——数据类型

    JavaScript的数据类型公有六种,ES6又新增了第七种Symbol类型的值. 数值(number) 字符串(string) 布尔值(boolean) undefined null 对象(obje ...

  7. BZOJ3032 七夕祭[中位数]

    发现是一个类似于“纸牌均分”的问题.然后发现,只要列数整除目标.行数整除目标就一定可以. 如果只移动列,并不会影响行,也就是同一行不会多不会少.只移动行同理. 所以可以把两个问题分开来看,处理起来互不 ...

  8. 【bzoj3083】遥远的国度(树链剖分+线段树)

    题目描述 zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国度.当zcwwzdjn准备进入遥远的国度继续追杀时,守护神RapiD阻拦了zcwwzdjn的去路,他需要zcwwzdjn完成 ...

  9. [2019牛客多校第二场][A. Eddy Walker]

    题目链接:https://ac.nowcoder.com/acm/contest/882/A 题目大意:圆上有\(n\)个点,标号从\(0\)到\(n-1\),初始一个人在点\(0\),每次会等概率向 ...

  10. POJ2182 Lost Cows 树状数组

    题意:有编号1~n乱序排列的奶牛,给出了每一个奶牛前小于自己编号的奶牛数目 维护一个树状数组,下标是编号,值为$0/1$标识是否存在,很显然最后一个牛的编号是知道的,我们在树状数组上二分出前缀和为小于 ...