随笔分类 -  flask-web开发

摘要:在用户模型下定义属性和方法,用于判断用户的权限 @propertydef permissions(self): """ 返回用户拥有的所有权限 """ if not self.roles: # 判断用户是否绑定角色 return 0 all_permissions = 0 for role in s 阅读全文
posted @ 2019-11-25 22:29 向前走。 阅读(376) 评论(0) 推荐(0)
摘要:模型与权限关系映射表 class CMSPersmission: """ 权限管理映射 """ # 255的二进制方式来表示 1111 1111 ALL_PERMISSION = 0b11111111 # 1. 访问者权限 VISITOR = 0b00000001 # 2. 管理帖子权限 POSTE 阅读全文
posted @ 2019-11-25 21:48 向前走。 阅读(911) 评论(0) 推荐(0)
摘要:这里采用把验证码放到memcached中,所以封装一个memcached的操作 import memcachecache = memcache.Client(['127.0.0.1:11211'], debug=True)def set(key, value, timeout=60): return 阅读全文
posted @ 2019-11-24 21:28 向前走。 阅读(297) 评论(0) 推荐(0)
摘要:安装:pip install flask-mail 官方文档:https://pythonhosted.org/Flask-Mail/ 邮箱配置 MAIL_SERVER = 'smtp.qq.com' # 邮箱服务器地址MAIL_PORT = 465 # 端口MAIL_USE_TLS = True 阅读全文
posted @ 2019-11-23 23:05 向前走。 阅读(483) 评论(0) 推荐(0)
摘要:在base.css中加一个全局的css控制宽度 .form-container{ width: 300px;} 视图 class ResetEmailView(views.MethodView): decorators = [login_required] def get(self): return 阅读全文
posted @ 2019-11-23 21:20 向前走。 阅读(326) 评论(0) 推荐(0)
摘要:在base模板中引用 在修改密码的js中使用 $(function () { $('#submit').click(function (evnet) { evnet.preventDefault(); //阻止默认的提交表单事件 var oldpwdElement = $("input[name=' 阅读全文
posted @ 2019-11-23 17:22 向前走。 阅读(399) 评论(0) 推荐(0)
摘要:实现效果 css body.stop-scrolling { height: 100%; overflow: hidden; }.sweet-overlay { background-color: black; /* IE8 */ -ms-filter: "progid:DXImageTransfo 阅读全文
posted @ 2019-11-23 16:49 向前走。 阅读(967) 评论(0) 推荐(0)
摘要:鉴于flask-restful用起来太麻烦,这里自定义json统一返回格式和内容 from flask import jsonifyclass HttpCode: """ 定义一些约定好的业务处理状态 """ ok = 200 # 业务处理成功 unautherror = 401 # 没有授权 pa 阅读全文
posted @ 2019-11-23 16:18 向前走。 阅读(591) 评论(0) 推荐(0)
摘要:定义一个基类form,用于获取错误信息 from wtforms import Formclass BaseForm(Form): def get_error(self): # a = {'aaa': [xxx], 'bbb': [www]} a.popitem()[1][0]=xxx messag 阅读全文
posted @ 2019-11-22 23:17 向前走。 阅读(582) 评论(0) 推荐(0)
摘要:顺便实现ajax提交的时候默认提交csrf_token var http = { 'get':function (args) { args['method'] = 'get'; this.ajax(args); }, 'post':function (args) { args['method'] = 阅读全文
posted @ 2019-11-22 22:38 向前走。 阅读(337) 评论(0) 推荐(0)
摘要:加上CSRF防御 修改密码页面 视图 class ResetPwd(views.MethodView): decorators = [login_required] # 校验登录状态 def get(self): return render_template('cms/cms_resetpwd.ht 阅读全文
posted @ 2019-11-22 21:56 向前走。 阅读(776) 评论(0) 推荐(1)
摘要:模板抽取,将公共的页面抽出来作为模板 {% from 'common/_macros.html' import static %}<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title> {% block title % 阅读全文
posted @ 2019-11-22 21:07 向前走。 阅读(461) 评论(0) 推荐(0)
摘要:用户名渲染,使用flask的g对象,在用户请求进来之后,触发视图函数之前,拿用户的信息,放到g对象里面 @bp.before_requestdef before_request(): """ 请求进入视图函数之前判断用户是否登录,若已登录,则将当前用户的信息添加到g对象里面 """ if confi 阅读全文
posted @ 2019-11-21 22:54 向前走。 阅读(328) 评论(0) 推荐(0)
摘要:定义一个宏,用于渲染static文件的时候,只需要传文件名就可以,上下两个“-”是解决渲染的时候源代码换行的情况 {% macro static(filename) -%} {{ url_for('static', filename=filename) }}{%- endmacro %} {% fr 阅读全文
posted @ 2019-11-21 22:23 向前走。 阅读(571) 评论(0) 推荐(0)
摘要:装饰器,验证当前session中是否存在定义的user_id,没有就重定向到登录页 from flask import session, redirect, url_forfrom functools import wrapsimport configdef login_required(func) 阅读全文
posted @ 2019-11-21 21:48 向前走。 阅读(429) 评论(0) 推荐(1)
摘要:config form from wtforms import Form, StringField, IntegerFieldfrom wtforms.validators import Email, InputRequired, Lengthclass LoginForm(Form): email 阅读全文
posted @ 2019-11-21 21:21 向前走。 阅读(560) 评论(0) 推荐(0)
摘要:html <!DOCTYPE html><html lang="zh-CN"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" cont 阅读全文
posted @ 2019-11-21 20:20 向前走。 阅读(829) 评论(0) 推荐(0)
摘要:数据库信息 DEBUG = TrueSQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@127.0.0.1:3306/test'SQLALCHEMY_TRACK_MODIFICATIONS = False from flask_sqlalch 阅读全文
posted @ 2019-11-20 23:22 向前走。 阅读(835) 评论(0) 推荐(0)
摘要:目录结构 cms模块 from flask import Blueprintbp = Blueprint('cms', __name__, url_prefix='/cms')@bp.route('/')def index(): return 'cms index' from .views impo 阅读全文
posted @ 2019-11-20 21:55 向前走。 阅读(658) 评论(0) 推荐(0)
摘要:安装:pip install redis 连接 字符串操作 插入值 获取 删除值 列表操作,更多操作见源码 添加 获取 集合操作,更多操作见源码 哈希操作,更多操作见源码 事务操作:cache.pipeline(),更多操作见源码 发布与订阅:如用redis异步发邮件 监听 发布 再看监听 过滤数据 阅读全文
posted @ 2019-11-19 23:10 向前走。 阅读(209) 评论(0) 推荐(0)