这个网站上有很多人对我有类似的问题,但我似乎无法找到一个以我想要的方式解决它的问题。
我正在尝试从数据库中获取密码,以便我可以自动发送电子邮件。要做到这一点,我打电话给Credential.objects.get(username='foo').password
。这是我得到错误的地方。真正奇怪的是我已经在python控制台中访问了这个数据库,并在其中创建了一行。我不知道为什么它没有出现!
其他人似乎建议做以下事情:
try:
Credential.objects.get(username='foo').password
except Exception as e:
return None
这样做就是确保程序不会返回错误。这对我没有帮助,因为这不会失败。必须发送一封电子邮件,此电话必须获得该电子邮件。我几乎可以肯定我正在为此调用正确的功能,但之前我错了。任何有关这方面的帮助将不胜感激。
credential.py(出于安全原因不提供max_length
):
import d_models as models
class Credential(models.Model):
username = models.CharField()
password = EncryptedCharField()
以下可能会清除您的概念。
from django.core.exceptions import ObjectDoesNotExist
try:
Credential.objects.get(username='foo').password
except ObjectDoesNotExist:
#If User with username='foo' does not exist in database then it will comes #in exception.
#Even if there are multiple entries in database with username='foo' then also it will give you error for this you need to use another exception.
return "What ever you want to return on exception"
或者你可以尝试:
python manage.py shell
for user in Credentials.objects.all():
print username
print password
并检查数据库中可用的用户数(在settings.py文件中配置)。
经过两个小时的查看我的代码,我意识到我是个白痴。
我遗漏的一件事是我在一个测试用例中运行了这个函数,它将单独的空白测试数据库分开。函数调用不起作用,因为它试图进入错误的数据库!
为了解决这个问题,我刚刚调用:./manage.py dumpdata --format json --indent 4 -o ./full/path/to/file/credential.json
并将fixtures = ['./full/path/to/file/credential.json']
放在测试类的顶部。感谢大家的建议!希望我没有浪费太多时间!