0

我正在尝试设置电子邮件和 ADMINS 设置,并想查询用户模型以获取电子邮件地址和其他电子邮件凭据,因此我不必将该信息提供给 git hub 上的每个人。如果我将以下内容放在我的设置文件的末尾(在定义数据库之后):

from django.contrib.auth.models import User
u1 = User.objects.get(pk__exact=1)
ADMINS = ((u1.username, u1.email))
print ADMINS

我得到一个成功的查询并且服务器启动,但是当我尝试启动应用程序时,由于缺少设置,我收到了各种错误,具体取决于我在设置文件中放置上述代码的位置。

据此,我了解到您无法在设置文件中查询数据库,那么我可以将这段代码放在哪里,以便在服务器启动时填充 ADMINS 设置和电子邮件设置变量?

4

2 回答 2

1

我建议你不要使用 django 模型settings.py

通常,settings.py加载后,django 知道数据库配置是什么。

更惯用的做法是在 settings.py 的末尾添加一些代码:

from local_settings import *

或者只是覆盖ADMINS命名空间,ADMINS = (('admin', 'admin@example.com'))在 local_settings 中硬编码,

from local_settings import ADMINS

由于您不想将信息公开给 github,请添加local_settings.py到您的.gitignore.

正如@DJV 所说,“settings.py 中的 ADMINS 和超级用户意味着不同的东西(第一个应该管理网站,而其他人则管理内容)”,我认为 ADMINS 并不那么重要。

于 2013-03-14T15:15:06.097 回答
0

我希望这段代码在服务器启动时运行,而不是在每次请求时运行,而这个解决方案似乎就是这样做的。我不想对 ADMINS 进行硬编码,因为我喜欢使用 django 的管理员来管理用户的想法,而且由于我从数据库中提取用户名和电子邮件,我不必担心在代码中暴露用户的信息信息.

我在我的应用程序中创建了一个名为 admins.py 的文件,并在 init .py 中导入了该文件以执行代码。现在,当用户 is_superuser 时,他们的信息将自动添加到 ADMINS。

我的应用程序核心。初始化.py

from myapp.core.admins import *

myapp.core.admins.py

from django.conf import settings
from django.contrib.auth.models import User
from django.core.mail import mail_admins

#admins setup: These users will get 500 error emails
admins = User.objects.filter(is_superuser__exact=True)
settings.ADMINS = []
for u in admins:
    settings.ADMINS.append((u.username, u.email))

#send test email
if settings.SEND_TEST_EMAIL:
    mail_admins('SEVER HAS BEEN STARTED', 'The server has been started @ '+settings.SITE_IP, fail_silently=False)

更新:上述解决方案存在问题。我不得不重建我的数据库,当我运行 syncdb 时,由于缺少用户模型而失败。我尝试将导入移动到 models.py init 但仍然没有运气。第一个安全入口在哪里??我是否必须创建管理员模型或创建用户配置文件来扩展 auth/user 并添加 is_admin 字段?——</p>

于 2013-03-14T18:38:09.043 回答