成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

flask-maple使用文檔

_ang / 3178人閱讀

摘要:安裝用戶系統(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)了 GroupMixinUserMixin
如果要?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

email

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.UserMixinflask_maple.permission.models.GroupMixin
或者直接使用 flask_maple.auth.models.UserMixinflask_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 %}
{{ auth.login()}}
{% endblock %}
注意事項(xiàng)

登陸與登出默認(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更方便

基本查詢(已實(shí)現(xiàn))

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"]
日志

記錄 infoerror 兩個(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_mailTrue時(shí), 配置依賴于 flask_mail的配置(主要是不想寫多份)

MAIL_USERNAME
MAIL_PASSWORD
MAIL_SERVER
MAIL_PORT
MAIL_DEFAULT_SENDER
App

創(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

相關(guān)文章

  • (翻譯) MongoDB(4) 文檔

    摘要:使用文檔來(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...

    TNFE 評(píng)論0 收藏0
  • Wizard 開源文檔管理系統(tǒng)1.0發(fā)布啦

    摘要:總結(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)在終于下決...

    cod7ce 評(píng)論0 收藏0
  • MongoDB(三):創(chuàng)建、更新和刪除文檔

    摘要:排序結(jié)果的條件修改器條件,用戶對(duì)匹配的文檔進(jìn)行更新和必須指定一個(gè)布爾類型,表示是否刪除文檔和必須指定一個(gè)布爾類型,表示返回更新前的文檔還是更新后的文檔,默認(rèn)是更新前的文檔。 本文所有內(nèi)容以MongoDB 3.2 為基礎(chǔ)。 插入并保存文檔 插入是添加數(shù)據(jù)的基本方法??梢允褂胕nsert插入一個(gè)文檔: db.foo.insert({bar: baz}) 批量插入 使用批量插入,可以加快插入...

    zorro 評(píng)論0 收藏0
  • 《聊聊mongodb》系列三 了解一下MongoDB插入文檔的操作~

    摘要:布爾類型,表示文檔是否按照有序或者無(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...

    ityouknow 評(píng)論0 收藏0
  • MongoDB指南---5、創(chuàng)建、刪除文檔

    摘要:例如,假設(shè)要?jiǎng)h除集合中所有為的人刪除數(shù)據(jù)是永久性的,不能撤銷,也不能恢復(fù)。刪除速度刪除文檔通常很快,但是如果要清空整個(gè)集合,那么使用直接刪除集合會(huì)更快然后在這個(gè)空集合上重建各項(xiàng)索引。上一篇文章指南基礎(chǔ)知識(shí)使用下一篇文章指南更新文檔 上一篇文章:MongoDB指南---4、MongoDB基礎(chǔ)知識(shí)-使用MongoDB Shell下一篇文章:MongoDB指南---6、更新文檔 本章會(huì)介紹...

    jas0n 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<