开发web应用程序的实用工具
holger-utils的Python项目详细描述
霍尔格实用工具
哨兵
settings.py
fromholgerimportsentry...SENTRY_KEY='<your sentry key>'SENTRY_ORGANIZATION='<your sentry organization name>'SENTRY_PROJECT='<your sentry project name>'SENTRY_ALLOWED_ALL='if true all status captured'# default FalseSENTRY_ALLOWED_STATUS='list of status that should capture'# default []sentry.init()
或者
^{pr2}$弹性搜索
settings.py
ELASTIC_PROTOCOL='<http or https>'# default 'http'ELASTIC_HOST='<host that elastic run>'# default 'localhost'ELASTIC_PORT='<listen port>'# default 9200ELASTIC_USE_SSL=''# default FalseTIME_ZONE='<elastic timezone>'# default 'UTC'ELASTIC_ALLOWED_STATUS=['<allowed status>']# default []ELASTIC_USER='<elastic username>'# default ''ELASTIC_PASSWORD='<elastic secret>'# default ''
火基
settings.py
FIREBASE_APP_OPTIONS='<app dict options>'# default {}FIREBASE_APP_NAME='your app name'# default 'FIRESTORE_DEFAULT'
日志
for use log, you must config elastic search and sentry before
JWT身份验证
在你的根上网址.py文件(或任何其他url配置), 包括霍尔格的路线™s TokenObtainPairView和TokenRefreshView视图:
fromdjango.urlsimportpathfromholger.rest.authorizationimport(HolgerTokenObtainPairView,HolgerRefreshView)urlpatterns=[...,path('apiv1/accounts/token/',HolgerTokenObtainPairView.as_view(),name='token_obtain_pair'),path('apiv1/accounts/refresh/',HolgerRefreshView.as_view(),name='token_refresh'),...]
设置
一些霍尔格欧元™的身份验证行为可以是 通过中的设置变量自定义设置.py在
fromdatetimeimporttimedeltaSIMPLE_JWT={'ACCESS_TOKEN_LIFETIME':timedelta(minutes=5),'REFRESH_TOKEN_LIFETIME':timedelta(days=1),'ROTATE_REFRESH_TOKENS':False,'BLACKLIST_AFTER_ROTATION':True,'ALGORITHM':'HS256','SIGNING_KEY':SECRET_KEY,'VERIFYING_KEY':None,'AUDIENCE':None,'ISSUER':None,'AUTH_HEADER_TYPES':('Bearer',),'USER_ID_FIELD':'id','USER_ID_CLAIM':'user_id','AUTH_TOKEN_CLASSES':('Holger.rest.authorization.AccessToken',),'TOKEN_TYPE_CLAIM':'token_type','JTI_CLAIM':'jti','SLIDING_TOKEN_REFRESH_EXP_CLAIM':'refresh_exp','SLIDING_TOKEN_LIFETIME':timedelta(minutes=5),'SLIDING_TOKEN_REFRESH_LIFETIME':timedelta(days=1),}
数据库副本路由器
使用database.router.ReplicaRouter
时,所有读取查询都将转到副本
数据库;所有插入、更新和删除都将对default
执行操作
数据库。
{cd3>定义你的第一个设置。它应该是
可在DATABASES
中找到的数据库别名:
DATABASES={'default':{...},'replica-1':{...},'replica-2':{...},}REPLICA_DATABASES=['replica-1','replica-2']
然后将database.router.ReplicaRouter
放入数据库路由器:
DATABASE_ROUTERS=('database.router.ReplicaRouter',)
副本数据库将以循环方式选择。
如果要连接到应用程序中的副本,请使用database.router.ReplicaRouter
fromdjango.dbimportconnectionsfromholger.databaseimportrouterconnection=connections[router.get_replica()]
数据库PinningReplicaRouter
在某些应用程序中,主数据库接收到
写操作及其对副本的复制足以导致不一致
对于最终用户。例如,假设有1秒的复制延迟。
如果一个用户在论坛上发了一篇帖子(到主论坛),然后被重定向
在500毫秒后(从复制副本)到它的完全渲染视图,视图将失败。
如果这是应用程序中的问题,请考虑使用multidb.PinningReplicaRouter
。
此路由器与multidb.middleware.PinningRouterMiddleware
结合使用
为了确保在写入default
数据库后,future将从相同的数据库中读取
在可配置的时间长度内,用户代理被定向到default
数据库。在
PinningRouterMiddleware
主要按请求类型标识数据库写入,
假设使用HTTP方法的请求不是GET
、TRACE
、HEAD
或{holger.database.router.db_write
装饰器。这将导致同样的结果
好像请求是,例如,POST
。在
要使用PinningReplicaRouter
,请将其放入设置中的DATABASE_ROUTERS
:
DATABASE_ROUTERS=('database.router.PinningReplicaRouter',)
然后,安装中间件。它必须在任何其他中间件之前列出 执行数据库写入:
MIDDLEWARE_CLASSES=('multidb.middleware.PinningRouterMiddleware',...moremiddlewarehere...)
PinningRouterMiddleware
将cookie附加到刚刚写入的任何用户代理。
cookie应设置为比复制延迟更长的时间过期。
默认情况下,它的值是保守的15秒,但可以按如下方式进行调整:
HOLGER_PINNING_SECONDS=5
如果需要更改cookie的名称,请使用HOLGER_PINNING_COOKIE
设置:
HOLGER_PINNING_COOKIE='holger_pin_writes'
- 项目
标签: