2017-06-02 84 views
2

我有一个带有3个环境(本地,分段,生产)的Django网站。将生产django数据库的一部分复制到本地或分段

生产包含一些数据,我不希望我的开发人员有权访问(用户的个人数据和财务数据)。

执行数据库备份还原不是遵从性原因的选项。

但是,我们在本网站上也有一些内容页面,我们使用W CMS CMS进行管理。

我正在寻找一种将生产数据(仅某些型号,但特别是w pages页)同步到暂存和开发者本地环境的方法。

理想我想有一个管理命令,我可以在另一个环境中运行复制数据:

例如:./manage.py sync_from_prod BlogPost这将在当地找到或临时环境中的所有失踪的博客文章,并会在数据库中创建它们。我找不到任何图书馆为W or或Django做这件事。

这似乎是一个常见问题,我很惊讶地发现没有Stackoverflow问题或开源库修复此问题。

如果没有存在我可能会尝试写我自己的Django模型同步(发现这个项目,但3岁直到Django的1.7兼容,我在python3的Django 1.11)

为了管理安全性,开发人员可以使用一个秘密访问暴露数据的生产API(通过ssl),例如

回答

0

您可以在prod中使用dumpdata命令(或扩展命令)来获取JSON导出的博客数据,然后在本地使用loaddata命令保存到您的本地环境中。

如何实施工作流完全取决于您,例如。您可能想要将dumpdata命令封装在受保护的API中,然后在本地env中创建/运行sync_from_prod命令以调用该API并使用prod的JSON导出数据执行call_command('loaddata', 'data_file.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') 
+0

与转储数据的问题是,您对数据没有控制,你得到(无过滤器,用于将个人识别数据点没有挂钩)。 – Benos

+0

我是在你想同步从prod的BlogPost上下文。混淆数据部分是一个单独的问题。 –

相关问题