Ben*_*nos 8 python database django development-environment wagtail
我有一个 Django 网站,有 3 个环境(本地、暂存、生产)。
生产包含一些我不希望我的开发人员访问的数据(用户的个人数据和财务数据)。
出于合规性原因,不可以选择执行数据库备份恢复。
不过,我们在该网站上也有一些内容页面,我们使用 Wagtail CMS 进行管理。
我正在寻找一种在需要时将生产数据(仅某些模型,但特别是 wagtail 页面)同步回暂存和开发人员本地环境的方法。
理想情况下,我会有一个可以在另一个环境中运行来复制数据的管理命令:
示例:./manage.py sync_from_prod BlogPost这将在本地或临时环境中找到所有丢失的博客文章,并在数据库中创建它们。我找不到任何库可以为 Wagtail 或 Django 执行此操作。
这似乎是一个常见问题,我很惊讶地发现没有 Stackoverflow 问题或开源库解决这个问题。
如果什么都不存在,我可能会尝试编写自己的 django-model-sync (找到了这个项目,但已有 3 年历史并且兼容直到 django 1.7,我使用 python3 django 1.11)
为了管理安全性,开发人员可以使用机密来访问公开数据(通过 ssl)的生产 API
您可以使用dumpdataprod 中的命令(或扩展命令)来获取博客数据的 JSON 导出,然后loaddata在本地使用命令将其保存到本地环境中。
如何实现工作流程完全取决于您,例如。您可能希望将dumpdata命令包装在 prod 上受保护的 API 中,然后sync_from_prod在本地环境中创建/运行命令来调用该 api 并call_command('loaddata', 'data_file.json')使用从 prod 导出的 JSON 数据执行该命令。
伪代码:
# the api view to provide the data on prod
def dumpdata_view(requst):
output = StringIO.StringIO()
call_command('dumpdata', output=output)
output.seek(0)
return JsonResponse(output.readlines()
# command to execute locally
class sync_from_prod(BaseCommand):
def handle(self, *args, **kwargs):
with open('data_file.json', 'w') as f:
data = requests.get('https://prod/api/dumpdata?model=BlogPost')
f.write(data.content)
call_command('loaddata', 'data_file.json')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2613 次 |
| 最近记录: |