基本上,如果用户登录时不必担心复制延迟,我们希望他们读/写主服务器; 但如果用户未登录,我们希望他们从副本中读取并写入主服务器.使用Django路由器可以吗?
这可能是不好的做法,但是在代码中的任何时候,只要你使用Django> = 1.2,使用using()方法和using关键字,你就可以完全控制哪个数据库选择你的QuerySet并进行保存和删除.
例如,对于QuerySet:
>>> MyModel.objects.using('replica').all()
Run Code Online (Sandbox Code Playgroud)
或保存对象:
>>> my_object.save(using='master')
Run Code Online (Sandbox Code Playgroud)
所以你总是可以在视图中做这样的事情:
query_set = MyModel.objects.all()
if request.user.is_authenticated():
query_set = query_set.using('master')
Run Code Online (Sandbox Code Playgroud)
但这可能会变得非常麻烦,如果你决定走这条路,你应该寻求一种更优雅的方法来缓解它.我想到了信号,中间件和/或模型管理器.
请参阅从Django文档中手动选择数据库.
| 归档时间: |
|
| 查看次数: |
720 次 |
| 最近记录: |