nosql后端的流模型更新

django_nosql的Python项目详细描述


django nosql

coveragePyPI version

Stream model changes to an upstream NoSQL database

支持的后端:

  • 消防商店
  • 模拟

todo后端

  • 重新思考数据库
  • Postgres(jsonfield)
  • 休息
  • redis
  • ETCD

安装

pip install django-nosql

设置

添加到已安装的应用程序:

INSTALLED_APPS=[...,'django_nosql',...]

配置nosql后端:

在settings.py中:

# you can have multiple backends:NOSQL_BACKENDS=['firestore']#  FireStore settingsFIRESTORE_CREDENTIALS_FILE='/path/to/credentials.json'

标记您的型号:

models.py

Todo(models.model):# the nosql collection you'd like to usecollection='todos'# A Django Rest Framework serializer for serializing your instanceserializer_path='example_app.models.TodoSerializer'# inform django_nosql that you'd like to sync this modelreadonly_sync=True

添加信号:

fromdjango_nosql.signalsimport(sync_readonly_db,sync_remove_readonly_db)

测试:

此回购协议中包含一个示例应用程序。

若要查看正在运行的同步,请尝试。

python manage.py shelldocker-compose run --rm web python manage.py shell

fromexample_app.modelsimportTodotodo=Todo.objects.create(text='Setup django nosql')# you should see this reflected in the 'todos' collection in Firebase# note: you need to manually refresh the db view when adding a new collection# you should see the rest of these updates in realtime# try update:todo.done=Truetodo.save()# you should see your change reflected in firestore# delete it:todo.delete()# it's gone from Firestore!

异步处理

如果您使用的是芹菜或django rq之类的东西,可以通过将基函数包装在@shared_task中使信号异步。例如:

fromdjango.db.models.signalsimportpost_save,post_deletefromdjango.dispatchimportreceiverfromdjango.confimportsettingsfromdjango_nosql.signalsimport(sync_readonly_db,SYNC_TYPE)fromceleryimportshared_task# create a shared task that wraps `sync_readonly_db`@shared_taskdeffirebase_sync(instance,created):sync_readonly_db(instance,SYNC_TYPE.UPDATE,created)@shared_taskdeffirebase_sync_remove(instance):sync_readonly_db(instance,SYNC_TYPE.DELETE,False)# call that function in a delayed manner@receiver(post_save,dispatch_uid="django_nosql.sync")defsync_readonly_db(sender,instance,created,**kwargs):firebase_sync.delay(instance,created)@receiver(post_delete,dispatch_uid="django_nosql.sync.delete")defsync_remove_readonly_db(sender,instance,**kwargs):firebase_sync_remove.delay(instance)

贡献

部署到PIP

# bumpversion:
bumpversion {major|minor|patch}
# push to gitlab
git push origin master
# gitlab CI does the rest

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java是否存在这样一种场景:Java7的Hashmap实现优于Java8的实现   java如何打印这些完整的数组?   java BuildException:未能执行aapt   java如何使用类。未知类型的集合返回的cast()   java准备语句返回错误的值   webview 安卓中的java显示身份验证对话框   java如何重命名列名JPA Hibernate   java查询从特定用户和特定时间段的Oracle表(通过比较原始表和备份表)中选择修改的行   java Youtube视频仅在三星S6设备上加载时自动暂停   未调用java RecyclerView getItemViewType   使用JSch setCommand执行带有源选项的java Shell ping命令时失败   java Hibernate:无法删除|删除分离的实例   Java Spring@MappedSuperclass字段作为子类中的@Id字段   java Android:确定单击了哪个按钮,因为该按钮未在xml中定义   如何计算java阵列内存使用率   使用Java查找按字母顺序排列的第一个字符串   javascript注销功能刷新页面,但页面仍已登录   当接口作为参数提供时,java依赖项注入不起作用   java中带原语的字符串扭曲