摘要:安裝用戶系統(tǒng)在中默認(rèn)實(shí)現(xiàn)了與如果要?jiǎng)?chuàng)建表與表只需要即可表默認(rèn)創(chuàng)建以下字段可添加更多想要的字段表默認(rèn)創(chuàng)建以下字段權(quán)限使用表與表可繼承與或者直接使用與添加權(quán)限刪除權(quán)限檢查權(quán)限權(quán)限緩存默認(rèn)權(quán)限會(huì)從數(shù)據(jù)庫(kù)獲取如果經(jīng)常使用,可自行添加緩存并在
安裝
To install Flask-Maple:
pip install flask-maple
Or alternatively, you can download the repository and install manually by doing:
git clone [email protected]:honmaple/flask-maple.git cd flask-maple python setup.py install用戶系統(tǒng)
在 flask_maple/auth/model.py 中默認(rèn)實(shí)現(xiàn)了 GroupMixin 與 UserMixin
如果要?jiǎng)?chuàng)建 user 表與 group 表,只需要
from flask_maple.auth.models import UserMixin, GroupMixin class User(db.Model, UserMixin): pass class Group(db.Model, GroupMixin): pass
即可
user 表默認(rèn)創(chuàng)建以下字段, 可添加更多想要的字段
id
username
password
is_superuser
is_confirmed
register_time
last_login
groups
group 表默認(rèn)創(chuàng)建以下字段
id
name
users
parent_group
child_groups
權(quán)限 使用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
添加權(quán)限
identity = user # or group identity.add_perm( action, resource, resource_type="endpoint", description=None)
刪除權(quán)限
identity.remove_perm( action, resource, resource_type="endpoint")
檢查權(quán)限
identity.has_perm(action, resource, resource_type="endpoint", and_=False)權(quán)限緩存
默認(rèn)權(quán)限會(huì)從數(shù)據(jù)庫(kù)獲取, 如果經(jīng)常使用,可自行添加緩存, 并在添加刪除權(quán)限后自行對(duì)緩存進(jìn)行操作
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)
將會(huì)創(chuàng)建6個(gè) url
/login
/logout
/register
/forget
/confirm
/confirm/
可以自定義登陸,注冊(cè),忘記密碼頁(yè)面,以登陸頁(yè)面為例 (templates/maple/login.html)
{% extends "base/base.html" %} {%- block content -%} {% import "maple/auth.html" as auth %}注意事項(xiàng){% endblock %}{{ auth.login()}}
登陸與登出默認(rèn)使用 user.login(remember) , user.logout(), 如果未使用 flask_maple/auth/model.py 中的 UserMixin,則需要自己定義
驗(yàn)證碼使用 Pillow 生成驗(yàn)證碼
pip install pillow使用
from flask_maple import Captcha captcha = Captcha(app) # 因?yàn)樽煮w可能存在版權(quán)問題,所以需要指定自己服務(wù)器字體, 默認(rèn)為 /usr/share/fonts/TTF/DejaVuSans.ttf captcha = Captcha(app, font="")
然后訪問 http://127.0.0.1/captcha
配置CAPTCHA_URL = "The captcha url,default "captcha""錯(cuò)誤處理
主要是對(duì)發(fā)生錯(cuò)誤時(shí)的頁(yè)面進(jìn)行定制(403,404,500)
from flask_maple import Error error = Error(app)
定制圖片源于flask官網(wǎng),侵刪
郵箱依賴于 flask-mail, 區(qū)別使用多線程發(fā)送
from flask_maple.mail import Mail mail = Mail(app) mail.send_email(*args, **kwargs)
此外,還有一個(gè) MailMixin,實(shí)現(xiàn)了郵箱驗(yàn)證需要的密鑰,
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))數(shù)據(jù)庫(kù)
像django一樣使用 flask-sqlalchemy
djang orm 與sqlalchemy相比,為什么很多人都認(rèn)為django orm更好用,大概就是因?yàn)閐jango 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()關(guān)系查詢
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 對(duì)象序列化為 json, 使用方法參考于 django rest framework
多個(gè)實(shí)例from flask_maple.serializer import Serializer posts = Post.query.all() serializer = Serializer(posts) data = serializer.data單個(gè)實(shí)例
post = Post.query.first() serializer = Serializer(post) data = serializer.data排除字段
serializer = Seralizer(post,exclude=["title"])僅包括字段
serializer = Seralizer(post,include=["title"])關(guān)系查詢深度
serializer = Seralizer(post,depth=3)
depth默認(rèn)為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)
中間件寫法(以一個(gè)簡(jiǎn)單的性能測(cè)試中間件為例)
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 兩個(gè)日志level, 使用很簡(jiǎn)單
from flask_maple.log import Logging app = ... Logging(app)
配置文件
LOGGING = { "info": "logs/info.log", # 記錄info level的日志,與配置文件同級(jí)下的logs目錄,可修改 "error": "logs/error.log", # 記錄error level的日志 "send_mail": False, # 當(dāng)有錯(cuò)誤發(fā)生時(shí),是否發(fā)送郵件到管理員郵箱 "toaddrs": [], # 管理員郵箱,可為多個(gè) "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 """ }
當(dāng)send_mail為 True時(shí), 配置依賴于 flask_mail的配置(主要是不想寫多份)
MAIL_USERNAME MAIL_PASSWORD MAIL_SERVER MAIL_PORT MAIL_DEFAULT_SENDERApp
創(chuàng)建兩個(gè)常用的 url
/robots.txt
/favicon.ico
使用from flask_maple.app import App App(app)
此外,因?yàn)閲?guó)際化等原因,可以傳遞 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
主要是個(gè)人經(jīng)常使用的一些模板,比如bootstrap的js,css文件,分頁(yè)模板, 上下?lián)螡M等
并依賴于 flask-assets ,對(duì)js,css文件進(jìn)行壓縮
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
默認(rèn)會(huì)加載 rediscluster.StrictRedisCluster ,如果rediscluster未安裝則加載 redis.StrictRedis
使用from flask_maple.redis import Redis redis = Redis(app) # 像平時(shí)使用redispy一樣使用 print(redis.get(...))配置
REDSI = {...}
具體例子可查看maple-bbs/extension
Github 原文
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41437.html
摘要:使用文檔來(lái)存儲(chǔ)數(shù)據(jù)紀(jì)錄。是文檔的二進(jìn)制表示。文檔的局限性文件有以下屬性文檔大小限制文檔的最大值為。存儲(chǔ)的文檔的大小超過了最大值,提供。在版本之前,不會(huì)盡量維持原文檔中的字段順序。更新文檔更新文檔使用更新操作中指定字段去執(zhí)行指定數(shù)據(jù)的修改。 MongoDB使用BSON文檔來(lái)存儲(chǔ)數(shù)據(jù)紀(jì)錄。BSON是JSON文檔的二進(jìn)制表示。盡管它比JSON包含更多的數(shù)據(jù)類型。對(duì)于BSON規(guī)范,查看bson...
摘要:總結(jié)如果你在為公司尋找一款開源免費(fèi)的開發(fā)文檔文檔管理工具,不妨考慮一下項(xiàng)目,一定不會(huì)讓你失望的。 Wizard 是一款開源文檔管理系統(tǒng),項(xiàng)目地址為 https://github.com/mylxsw/wizard。這個(gè)項(xiàng)目是 我 在2017年就開始開發(fā)的,起初只是想做一款能夠在公司內(nèi)部把Swagger文檔管理起來(lái)的工具,但在這近兩年的時(shí)間里,一直斷斷續(xù)續(xù)的為其添加各種功能,現(xiàn)在終于下決...
摘要:排序結(jié)果的條件修改器條件,用戶對(duì)匹配的文檔進(jìn)行更新和必須指定一個(gè)布爾類型,表示是否刪除文檔和必須指定一個(gè)布爾類型,表示返回更新前的文檔還是更新后的文檔,默認(rèn)是更新前的文檔。 本文所有內(nèi)容以MongoDB 3.2 為基礎(chǔ)。 插入并保存文檔 插入是添加數(shù)據(jù)的基本方法??梢允褂胕nsert插入一個(gè)文檔: db.foo.insert({bar: baz}) 批量插入 使用批量插入,可以加快插入...
摘要:布爾類型,表示文檔是否按照有序或者無(wú)序插入,默認(rèn)是返回參數(shù)返回了含有操作狀態(tài)的對(duì)象插入文檔成功返回如下對(duì)象字段指明了插入文檔的總數(shù)如果該操作遇到了錯(cuò)誤對(duì)象將包含該錯(cuò)誤信息例子四其它可以向集合中添加文檔的方法和選項(xiàng)一起使用的。 上一節(jié)介紹了MongoDB的基本的命令,以及結(jié)構(gòu)的了解,這一節(jié)的主題是介紹一下MongoDB的插入文檔的操作的基礎(chǔ)命令的使用,MongoDB當(dāng)中文檔的數(shù)據(jù)結(jié)構(gòu)和j...
摘要:例如,假設(shè)要?jiǎng)h除集合中所有為的人刪除數(shù)據(jù)是永久性的,不能撤銷,也不能恢復(fù)。刪除速度刪除文檔通常很快,但是如果要清空整個(gè)集合,那么使用直接刪除集合會(huì)更快然后在這個(gè)空集合上重建各項(xiàng)索引。上一篇文章指南基礎(chǔ)知識(shí)使用下一篇文章指南更新文檔 上一篇文章:MongoDB指南---4、MongoDB基礎(chǔ)知識(shí)-使用MongoDB Shell下一篇文章:MongoDB指南---6、更新文檔 本章會(huì)介紹...
閱讀 1610·2021-11-04 16:11
閱讀 3329·2021-09-09 11:33
閱讀 1572·2019-08-30 15:54
閱讀 627·2019-08-30 15:44
閱讀 3186·2019-08-30 15:43
閱讀 2568·2019-08-30 13:06
閱讀 1708·2019-08-29 17:00
閱讀 908·2019-08-29 15:33