SignupForm(BaseForm): telephone=StringField(validators=[Regexp(r'1[3578]\d{9}',message='请输入正确格式的手机号码...用户名长度在3-15位之间')]) password=StringField(validators=[Regexp(r'[0-9a-zA-Z_\.]{6,15}',message='请输入正确格式的密码...')]) password2=StringField(validators=[EqualTo('password',message='两次输入的密码不一致')]) graph_captcha...validators=[Regexp(r'\w{4}',message='图形验证码不正确')]) def validate_sms_captcha(self,field): # 必须传入的参数...self,field # 使用fields.data和使用self.sms_captcha.data是一样的 sms_captcha=field.data
SigninForm(BaseForm): telephone = StringField(validators=[Regexp(r'1[3578]\d{9}', message='请输入正确格式的手机号码...')]) password = StringField(validators=[Regexp(r'[0-9a-zA-Z_\.]{6,15}', message='请输入正确格式的密码')])
1.1.项目结构搭建 (1)创建flask项目Perfect_bbs,然后搭建项目结构如下: (2)构建蓝图 cms/views.py # cmd/views.py from flask import...# Perfect_bbs.py from flask import Flask from apps.cms import bp as cms_bp from apps.front import bp...config.py __author__ = 'derek' DEBUG = True DB_URI = "mysql+pymysql://root:123456@127.0.0.1:3306/bbs...终端添加用户 python manage.py create_cms_user -u derek -p 123456 -e 1184405959@qq.com 进数据库查看是否添加成功 发现密码是明文保存的,...#生成到数据库 添加用户 python manage.py create_cms_user -u derek -p 123456 -e 1184405959@qq.com 可以看到现在密码是加密保存的了
10.1.客户端权限验证功能完成 (1)cms/cms_profile 显示当前用户的角色和权限 角色:...bp.context_processor def cms_context_pocessor(): return {'CMSPermission':CMSPermission} (3)cms/cms_base.html 不同的角色...,显示不同的内容 {% set cms_user = g.cms_user %} {% if cms_user.has_permission(CMSPermission.POSTER...cms显示不同的内容 开发者 ?...10.2.服务端权限验证功能完成 (1)后台剩余的html页面 cms_posts.html {% extends 'cms/cms_base.html' %} {% block title %}
30.显示评论和添加评论功能完成 (1)apps/models.py class CommentModel(db.Model): __tablename...
7.2.Flask-mail的使用以及邮箱的配置 (1)exts.py from flask_mail import Mail mail = Mail() (2)Perfect_bbs.py from...MAIL_DEFAULT_SENDER = "1184405959@qq.com" (4)cms/views.py @bp.route('/email/') def send_email(): #1.标题,2.收件人,3.发送的正文内容...message = Message(subject='derek论坛密码修改邮件发送',recipients=['1184405959@qq.com',],body='第一次测试发送邮件')
priority) { zlalert.alertInfo('请输入完整的轮播图数据'); return; } zlajax.post
endblock %} (3)front_index.html {% extends "front/front_base.html" %} {% block title %} 仙剑论坛
tbody> {% endblock %} 19.2.添加轮播图模态对话框的制作
import BaseForm class LoginForm(BaseForm): email = StringField(validators=[Email(message='请输入正确的邮箱格式...")]) newpwd = StringField(validators=[Length(6,20,message="请输入正确格式的新密码")]) newpwd2 = StringField...(validators=[EqualTo('newpwd',message="两次输入的密码不一致")]) (3)cms/views.py class ResetPwdView(views.MethodView...的封装 'use strict'; var zlajax = { 'get':function(args) { args['method'] = 'get';...Administrator on 2018/6/3. */ $(function () { $("#submit").click(function (event) { //阻止按钮的提交表单的事件
图形验证码生成 (1)utils/captcha/init.py import random import string # Image:一个画布 # ImageDraw:一个画笔 # ImageFont:画笔的字体...import Image,ImageDraw,ImageFont # pip install pillow # Captcha验证码 class Captcha(object): # 生成几位数的验证码...number = 4 # 验证码图片的宽度和高度 size = (100,30) # 验证码字体大小 fontsize = 25 # 加入干扰线的条数...__gene_random_color()) # 生成随机的颜色 @classmethod def __gene_random_color(cls,start=0,end=255...__gene_random_color(0,100)) # 验证码的字体 font = ImageFont.truetype(cls.
extends 'front/signbase.html' %} {% from 'common/_macros.html' import static %} {% block title %} 仙剑论坛注册...src="{{ static('front/js/front_signup.js') }}"> {% endblock %} {% block h2_block %} 仙剑论坛注册...btn-block">立即注册 {% endblock %} (3)front/css/front_signbase.css 把之前signup中的css...放到公共的地方,登录页面也需要 body { background: #f3f3f3; } .outer-box { width: 854px; background: #fff...extends 'front/signbase.html' %} {% from 'common/_macros.html' import static %} {% block title %} 仙剑论坛登录
9.1.权限和角色模型定义 (1)cms/models class CMSPermission(object): ALL_PERMISSION = 0b11111111 # 1.访问者的权限...VISITOR = 0b00000001 # 2.管理帖子的权限 POSTER = 0b00000010 # 3.管理评论的权限 COMMENTER = 0b00000100...# 4.管理板块的权限 BOARDER = 0b00001000 # 5.管理前台用户的权限 FRONTUSER = 0b00010000 # 6.管理后台用户的权限...CMSUSER = 0b00100000 # 7.管理后台管理员的权限 ADMINER = 0b01000000 cms_role_user = db.Table(...0 all_permissions = 0 #用户所有的角色 for role in self.roles: #取出用户所有角色的所有权限
= db.Column(db.DateTime,default=datetime.now) def __init__(self,*args,**kwargs): #如果传入的参数里面有...kwargs.get("password") #处理完后把password pop出去 kwargs.pop("password") #剩下的参数交给父类去处理..._password #保存密码的时候加密 @password.setter def password(self, raw_password): self.
if not email: return restful.params_error('请输入要修改的邮箱') #得到大小写字母的列表 source = list...(string.ascii_letters) #得到大小写字母的列表 + 0到9的数字字符串 source.extend(map(lambda x: str(x), range(0, 10...captcha = "".join(random.sample(source, 6)) #给这个邮箱发送邮件验证码 message = Message(subject='derek论坛密码修改邮件发送...= self.email.data #缓存里面保存的邮箱对应的验证码 captcha_cache = zlcache.get(email) #如果缓存中没有这个验证码...,或者缓存中的验证码跟form提交的验证码不相等(不区分大小写) # 两个有一个不成立,就抛异常 if not captcha_cache or captcha.lower
InputRequired,Length class LoginForm(Form): email = StringField(validators=[Email(message='请输入正确的邮箱格式...else: return self.get(message='用户名或密码错误') else: #form.errors的错误信息格式...,是一个字典,value是列表的形式 # {'email': ['请输入正确的邮箱格式'], 'password': ['密码长度不够或超出']} message...class="icon-bar"> Zhang_derek论坛管理后台...div> 我的论坛
4.1.cms登录页面csrf保护 (1)Perfect_bbs.py from flask_wtf import CSRFProtect CSRFProtect(app) 添加csrf保护后,现在再去登录
仙剑论坛...body> (4)front/front_index.html {% extends "front/front_base.html" %} {% block title %} 仙剑论坛...{% endblock %} {% block head %} {% endblock %} {% block body %} 论坛首页 {% endblock %} (5)front/
6.1.优化json数据的返回 (1)新建utils/restful.py # utils/restful.py from flask import jsonify class HttpCode(object...by derek on 2018/6/3. */ $(function () { $("#submit").click(function (event) { //阻止按钮的提交表单的事件...标签中渲染一个csrf-token //2.在ajax请求的头部汇总设置X-CSRFtoken zlajax.post({ 'url':'/cms...error) { zlalert.alertNetworkError(error); } }); }); }); 修改密码弹出的信息...旧密码输错的提示信息 ?
13.2.短信验证码 (1)utils/alidayu.py # 仙剑论坛-阿里大于短信验证码sdk import hashlib from time import time import logging...config.py ALIDAYU_APP_KEY = 'LTxxxxxxBBfT8Q' ALIDAYU_APP_SECRET = 'SRxxxxxx8IL8LhJ' ALIDAYU_SIGN_NAME = '仙剑论坛网站...' ALIDAYU_TEMPLATE_CODE = 'SMS_136xxx947' (4)perfect_bbs.py alidayu.init_app(app) (5)common/views.py...'telephone') if not telephone: return restful.params_error(message='请输入手机号码') #生成四位数的验证码...(/^1[3578]\d{9}$/.test(telephone))) { zlalert.alertInfoToast('请输入正确的手机号'); return
领取专属 10元无门槛券
手把手带您无忧上云