我是 Django 的新手,所以在过去的几周里它有点像教程。我想我了解基础知识,并且喜欢从各种教程中制作很多简单的东西(博客、照片库、日历等)。我仍然觉得自己是 Django 的初学者,但现在正尝试对其进行自定义以满足我的项目需求。
情况:我的任务是为两个数据库创建一个接口(interface)。该界面的主要目的是查看表格之间的复杂关系,但也可以根据需要对其进行编辑。我的问题是我对我的两个数据库具有基本的读/写访问权限,但不能执行创建表之类的操作。因此,创建模型并使用 Django 同步/迁移这些数据库是不可能的,因为它要在这些数据库上创建表才能执行此操作。到目前为止,我的工作重点是获得以下路由/模型结构:
- 数据库 1:Django 身份验证/管理员(完全访问权限)
- 数据库 2:我的第一个数据库(脚本)(仅读/写访问:不创建表)
- 数据库 3:我的第二个数据库(服务)(仅读/写访问:不创建表)
我发现最接近我的教程是这个:Reporting Django Multi DB Support , 但我的两个数据库在它们的表定义中没有容易分离的前缀,所以我不确定如何编写路由器定义文件,除了为 db_for_read< 中每个数据库中的每个表编写条件之外/strong>/db_for_write 函数。
我开始觉得我在试图让 Django 做一些它真的不想做的事情。
所以我的问题是:我是否继续尝试让 Django 做我想做的事?如果是这样,那么有没有人有任何可以帮助我的有针对性的资源、教程或建议?我已经通读了官方文档,但他们似乎并没有针对我的问题。
如果我不选择 Django,我会考虑像 Flask 这样的东西,因为它有更多的自由。然而,我的项目最终将成为一个相当大的高容量网站,其中包含多个项目和应用程序。我对 Flask 的体验非常好,但我担心如果我不小心,将它用于如此大规模的项目会导致一团糟。
有什么建议吗?
更新: 我已经取得了一些进展(部分是根据下面 yuvi 的建议),但我仍然有错误。它现在正在从我想要的路由器读取,但不正确。以下是一些有问题的文件:
设置.py
DATABASE_ROUTERS = ['ticket.DataRouter', 'ticket.ScriptRouter']
脚本模型.py
from __future__ import unicode_literals
from django.db import models
class Archiveticket(models.Model):
....
脚本路由器.py
class ScriptRouter(object):
def db_for_read(self, model, **hints):
return 'Scripts'
def db_for_read(self, model, **hints):
return 'Scripts'
def allow_relation(self, obj1, obj2, **hints):
return None
def allow_migrate(self, db, model):
return False
数据路由器.py
class DataRouter(object):
def db_for_read(self, model, **hints):
return 'Data'
def db_for_read(self, model, **hints):
return 'Data'
def allow_relation(self, obj1, obj2, **hints):
return None
def allow_migrate(self, db, model):
return False
View .py
from django.http import HttpResponse
from django.shortcuts import render
from django.db import models
from ticket.ScriptModel import Archiveticket
def index(request):
a = Archiveticket.objects.all()
return render(request, 'tickets.tmpl', {'obj' : a})
门票.tmpl
{% for b in obj %}
{{ b.archiveTicketId }}<br/>
{% endfor %}
加载 URL 时出现错误:
ImportError Module "ticket.DataRouter" does not define a "DataRouter" attribute / class
但是,如果我查看 DataRouter.py 文件,就会明确指定该类。我一定在这里错过了什么。我知道 DataRouter 是第一个,因为这是进行大多数查询的地方,但作为 POC,我想查询另一个表,但在查看第一个数据库时似乎失败了。我错过了什么?
请您参考如下方法:
您可能想查看 setting up your own routers to control the multiple databases :
The easiest way to use multiple databases is to set up a database routing scheme. The default routing scheme ensures that objects remain ‘sticky’ to their original database [...]
However, if you want to implement more interesting database allocation behaviors, you can define and install your own database routers.
基本上,您使用四种方法配置 FooRoute 类:db_for_read、db_for_write、allow_relation 和 allow_migrate,然后在 settings.py 中注册它们:
DATABASE_ROUTERS = ['path.to.FooRouter']
请参阅 detailed example 的文档
