摘要:安装用户系统在中默认实现了与如果要创建表与表只需要即可表默认创建以下字段可添加更多想要的字段表默认创建以下字段权限使用表与表可继承与或者直接使用与添加权限删除权限检查权限权限缓存默认权限会从数据库获取如果经常使用,可自行添加缓存并在
安装
To install Flask-Maple:
pip install flask-maple
Or alternatively, you can download the repository and install manually by doing:
git clone git@github.com:honmaple/flask-maple.git cd flask-maple python setup.py install用户系统
在 flask_maple/auth/model.py 中默认实现了 GroupMixin 与 UserMixin
如果要创建 user 表与 group 表,只需要
from flask_maple.auth.models import UserMixin, GroupMixin class User(db.Model, UserMixin): pass class Group(db.Model, GroupMixin): pass
即可
user 表默认创建以下字段, 可添加更多想要的字段
id
username
password
is_superuser
is_confirmed
register_time
last_login
groups
group 表默认创建以下字段
id
name
users
parent_group
child_groups
权限 使用from flask_maple.permission.models import PermissionMixin class Permission(db.Model, PermissionMixin): pass
user 表与 group 表可继承 flask_maple.permission.models.UserMixin 与 flask_maple.permission.models.GroupMixin
或者直接使用 flask_maple.auth.models.UserMixin 与 flask_maple.auth.models.GroupMixin
添加权限
identity = user # or group identity.add_perm( action, resource, resource_type="endpoint", description=None)
删除权限
identity.remove_perm( action, resource, resource_type="endpoint")
检查权限
identity.has_perm(action, resource, resource_type="endpoint", and_=False)权限缓存
默认权限会从数据库获取, 如果经常使用,可自行添加缓存, 并在添加删除权限后自行对缓存进行操作
class User(db.Model, UserMixin): def perm_cache(self, action, resource, resource_type="endpoint", and_=False): return登录
依赖于 flask-login, flask-mail
使用from flask_maple import auth auth.init_app(app) # 或者 from flask_maple.auth.views import Auth Auth(app)
将会创建6个 url
/login
/logout
/register
/forget
/confirm
/confirm/
可以自定义登陆,注册,忘记密码页面,以登陆页面为例 (templates/maple/login.html)
{% extends "base/base.html" %} {%- block content -%} {% import "maple/auth.html" as auth %}注意事项{% endblock %}{{ auth.login()}}
登陆与登出默认使用 user.login(remember) , user.logout(), 如果未使用 flask_maple/auth/model.py 中的 UserMixin,则需要自己定义
验证码使用 Pillow 生成验证码
pip install pillow使用
from flask_maple import Captcha captcha = Captcha(app) # 因为字体可能存在版权问题,所以需要指定自己服务器字体, 默认为 /usr/share/fonts/TTF/DejaVuSans.ttf captcha = Captcha(app, font="")
然后访问 http://127.0.0.1/captcha
配置CAPTCHA_URL = "The captcha url,default "captcha""错误处理
主要是对发生错误时的页面进行定制(403,404,500)
from flask_maple import Error error = Error(app)
定制图片源于flask官网,侵删
邮箱依赖于 flask-mail, 区别使用多线程发送
from flask_maple.mail import Mail mail = Mail(app) mail.send_email(*args, **kwargs)
此外,还有一个 MailMixin,实现了邮箱验证需要的密钥,
from flask_maple.mail import MailMixin class User(db.Model, MailMixin): pass print(user.email_token) print(User.check_email_token(token, max_age=259200))数据库
像django一样使用 flask-sqlalchemy
djang orm 与sqlalchemy相比,为什么很多人都认为django orm更好用,大概就是因为django orm更方便
gt
lt
lte
gte
contains
in
exact
iexact
startswith
istartswith
iendswith
endswith
isnull
range
year
month
day
示例:
Post.query.filter_by(title__contains = "sql").all() Post.query.exclude_by(title__contains = "sql").all()关系查询
Post.query.filter_by(tags__name__contains = "sql").all()其它
Post.query.filter_by(tags__name__contains = "sql").or(Post.id == 1,Post.id == 2).all() Post.query.filter_by(tags__name__contains = "sql").and(Post.id == 1,Post.id == 2).all() Post.query.filter_by(tags__name__contains = "sql").exists() Post.query.load_only("title")序列化
把 sqlalchemy 对象序列化为 json, 使用方法参考于 django rest framework
多个实例from flask_maple.serializer import Serializer posts = Post.query.all() serializer = Serializer(posts) data = serializer.data单个实例
post = Post.query.first() serializer = Serializer(post) data = serializer.data排除字段
serializer = Seralizer(post,exclude=["title"])仅包括字段
serializer = Seralizer(post,include=["title"])关系查询深度
serializer = Seralizer(post,depth=3)
depth默认为2
额外的字段class Post(Model): ...... def get_post_count(self): return 11 serializer = Serializer(post,extra=["get_post_count"])自定义
from flask_maple.serializer import Serializer class PostSerializer(Serializer): class Meta: include = [] depth = 2 include = [] exclude = [] extra = ["count"] serializer = PostSerializer(post,include=["title"])中间件
参考于 django
from flask_maple.middleware import Middleware app = ... Middleware(app)
中间件写法(以一个简单的性能测试中间件为例)
class ProfileMiddleware(object): def preprocess_request(self): pr = cProfile.Profile() pr.enable() request.pr = pr def process_response(self, response): pr = request.pr pr.disable() s = StringIO() sortby = "cumulative" ps = pstats.Stats(pr, stream=s).sort_stats(sortby) ps.print_stats() print(s.getvalue()) return response
重要 ,需要加入中间件配置
MIDDLEWARE = ["path.to.ProfileMiddleware"]日志
记录 info 和 error 两个日志level, 使用很简单
from flask_maple.log import Logging app = ... Logging(app)
配置文件
LOGGING = { "info": "logs/info.log", # 记录info level的日志,与配置文件同级下的logs目录,可修改 "error": "logs/error.log", # 记录error level的日志 "send_mail": False, # 当有错误发生时,是否发送邮件到管理员邮箱 "toaddrs": [], # 管理员邮箱,可为多个 "subject": "Your Application Failed", "formatter": """ Message type: %(levelname)s Location: %(pathname)s:%(lineno)d Module: %(module)s Function: %(funcName)s Time: %(asctime)s Message: %(message)s """ }
当send_mail为 True时, 配置依赖于 flask_mail的配置(主要是不想写多份)
MAIL_USERNAME MAIL_PASSWORD MAIL_SERVER MAIL_PORT MAIL_DEFAULT_SENDERApp
创建两个常用的 url
/robots.txt
/favicon.ico
使用from flask_maple.app import App App(app)
此外,因为国际化等原因,可以传递 flask_maple.json.CustomJSONEncoder 给App
from flask_maple.app import App from flask_maple.json import CustomJSONEncoder App(app, json=CustomJSONEncoder)配置
参考于 django,可以懒加载 blueprint
INSTALLED_APPS = [ "path.to.blueprint1", "path.to.blueprint2", { "kwargs":{}, "blueprint":{} } ]Bootstrap
主要是个人经常使用的一些模板,比如bootstrap的js,css文件,分页模板, 上下撑满等
并依赖于 flask-assets ,对js,css文件进行压缩
from flask_maple import Bootstrap bootstrap = Bootstrap( app, css=("styles/monokai.css", "styles/mine.css"), js=("styles/upload.js", "styles/forums.js", "styles/following.js", "styles/topic.js"), use_auth=True)
或者
bootstrap = Bootstrap() bootstrap.init_app(app)模板
{% extends "maple/base.html" %} {% block main -%} {% endblock -%}配置
AUTHOR_NAME = "This will show you name at html footer"Redis
默认会加载 rediscluster.StrictRedisCluster ,如果rediscluster未安装则加载 redis.StrictRedis
使用from flask_maple.redis import Redis redis = Redis(app) # 像平时使用redispy一样使用 print(redis.get(...))配置
REDSI = {...}
具体例子可查看maple-bbs/extension
Github 原文
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/41437.html
摘要:使用文档来存储数据纪录。是文档的二进制表示。文档的局限性文件有以下属性文档大小限制文档的最大值为。存储的文档的大小超过了最大值,提供。在版本之前,不会尽量维持原文档中的字段顺序。更新文档更新文档使用更新操作中指定字段去执行指定数据的修改。 MongoDB使用BSON文档来存储数据纪录。BSON是JSON文档的二进制表示。尽管它比JSON包含更多的数据类型。对于BSON规范,查看bson...
摘要:总结如果你在为公司寻找一款开源免费的开发文档文档管理工具,不妨考虑一下项目,一定不会让你失望的。 Wizard 是一款开源文档管理系统,项目地址为 https://github.com/mylxsw/wizard。这个项目是 我 在2017年就开始开发的,起初只是想做一款能够在公司内部把Swagger文档管理起来的工具,但在这近两年的时间里,一直断断续续的为其添加各种功能,现在终于下决...
摘要:排序结果的条件修改器条件,用户对匹配的文档进行更新和必须指定一个布尔类型,表示是否删除文档和必须指定一个布尔类型,表示返回更新前的文档还是更新后的文档,默认是更新前的文档。 本文所有内容以MongoDB 3.2 为基础。 插入并保存文档 插入是添加数据的基本方法。可以使用insert插入一个文档: db.foo.insert({bar: baz}) 批量插入 使用批量插入,可以加快插入...
摘要:布尔类型,表示文档是否按照有序或者无序插入,默认是返回参数返回了含有操作状态的对象插入文档成功返回如下对象字段指明了插入文档的总数如果该操作遇到了错误对象将包含该错误信息例子四其它可以向集合中添加文档的方法和选项一起使用的。 上一节介绍了MongoDB的基本的命令,以及结构的了解,这一节的主题是介绍一下MongoDB的插入文档的操作的基础命令的使用,MongoDB当中文档的数据结构和j...
摘要:例如,假设要删除集合中所有为的人删除数据是永久性的,不能撤销,也不能恢复。删除速度删除文档通常很快,但是如果要清空整个集合,那么使用直接删除集合会更快然后在这个空集合上重建各项索引。上一篇文章指南基础知识使用下一篇文章指南更新文档 上一篇文章:MongoDB指南---4、MongoDB基础知识-使用MongoDB Shell下一篇文章:MongoDB指南---6、更新文档 本章会介绍...
阅读 1620·2021-11-04 16:11
阅读 3343·2021-09-09 11:33
阅读 1600·2019-08-30 15:54
阅读 633·2019-08-30 15:44
阅读 3192·2019-08-30 15:43
阅读 2578·2019-08-30 13:06
阅读 1712·2019-08-29 17:00
阅读 916·2019-08-29 15:33