是否有可能编写Django应用程序,例如用于内部/个人使用现有数据库,而没有Djangos拥有通常在启动项目时安装的表的“开销”?我想通过模型使用现有的表,但不能拥有在普通网页上肯定有用的所有其他内容。
原因是建立小型个人检查/管理工具而不会侵入遗留数据库。
答案 0 :(得分:3)
Django本身不安装任何表。它附带了一些预制应用程序,可以安装表格,但可以通过从INSTALLED_APPS
设置中删除它们来轻松禁用它们。
答案 1 :(得分:2)
您还可以添加一个额外的数据库(将其设置为默认值),以保留额外的django开销:
DATABASES = {
'default': {
'ENGINE' : 'django.db.backends.sqlite',
'NAME' : 'djangoOverhead',
'USER' : '',
'PASSWORD' : '',
'HOST' : 'localhost' },
'legacyAppTables': {
'ENGINE' : 'django.db.backends.mysql',
'NAME' : 'legacyAppTables',
'USER' : '',
'PASSWORD' : '',
'HOST' : 'someRemoteHost' }, }
答案 2 :(得分:1)
定义了数据库表的最值得注意的应用是django.contrib.auth
,它在数据库中实现了自己的auth后端。如果您的应用程序是防火墙的,并且您信任所有可以访问它的人,您可以一起跳过auth。否则,您希望使用现有基础架构创建自己的身份验证机制,您很可能想要使用另一个后端。如果您的网络服务器设置了REMOTE_USER
,您可以使用another builtin backend,并且您应该关闭并运行。否则,您必须实现自己的功能才能引用其他身份验证来源。
从那里你只需要设置你的模型来使用现有的数据库表,而不是让他们自己创建。您可以对此进行非常精细的控制,例如
class MyModel(django.db.Model):
MyTextField = django.db.TextField(db_column="mytextfield", primary_key=True)
class Meta:
db_table = "my_table"
通过这种方式,您可以指定每个模型的每个字段应代表的确切表和列。请注意,您可以将主键设置为整数以外的类型。 django的ORM的限制是每个模型必须只有一个主键。因此,如果您没有表的主键,请添加一个,或者您必须在没有django的ORM帮助的情况下相处。
此外,由于您正在使用可能与其他应用相关的现有数据集,因此您可能不希望使用./manage.py syncdb
,因为它可能会执行一些不受欢迎的操作。
答案 3 :(得分:0)
不要安装任何Django的内置应用,也不要在应用中使用任何models.py
。您的数据库中将包含零表。
您将没有用户,站点或会话 - 这些是使用数据库的Django功能。
但是,AFAIK你还应该有一个SQLite数据库。我认为Django的部分假设你有一个数据库连接,它可能会尝试建立这种连接。
这是一个很容易尝试的实验。
答案 4 :(得分:0)
在项目的settings.py文件中(在项目开始时,在运行syncdb之前),请注意INSTALLED_APPS元组的 django 应用程序字符串。