【发布时间】:2013-02-16 02:33:34
【问题描述】:
在我的 rest_framework 设置中,我将 SessionAuthentication 设置为默认身份验证类
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
)
问题是我的 User DELETE api 视图试图折叠不存在的 authtoken_token 表上的删除(因为我不需要它),从而引发数据库异常。
具体来说,当在 DestroyModelMixin.destroy 中调用 obj.delete() 时,会引发此异常:
DatabaseError: relation "authtoken_token" does not exist
LINE 1: ...oken"."user_id", "authtoken_token"."created" FROM "authtoken...
是否需要同步数据库 rest_framework 的模型,即使不需要它们?
有没有办法在不包含 authtoken.models 的情况下使用 SessionAuthentication?
我做错了吗?
(从 rest_framework/authentication.py 中完全删除 authtoken.models.Token 似乎可以解决问题)
【问题讨论】:
-
不,你不需要
syncdb,除非你在INSTALLED_APPS设置中明确安装了rest_framework.authtoken。您是否不小心在您的INSTALLED_APPS中得到了它,或者您是否无意中创建了 ForeignKey 或其他关系?完整的追溯是什么? -
我没有在我的 INSTALLED_APPS 中明确安装 rest_framework.authtoken(仅 rest_framework)。但我开始怀疑在我们相当复杂的 django 项目的背景中发生了一些自动化。关于如何调试的任何想法?这是来自 DestroyModelMixin 的回溯:gist.github.com/nejcjelovcan/5dc47eea7134e12f5d6b
-
视图使用的模型的模型定义是什么?
-
显然,这仅发生在测试中,当我使用 django.test.client.Client (afaik 模拟实际的 HTTP 请求)执行 DELETE 请求时,并且仅当 rest_framework.authentication 在测试。对 API 的实际 HTTP DELETE 请求按预期工作(删除用户时不会因缺少 authtoken_token 而引发异常)。我将尝试在一个干净的 django 项目中重现该行为,因为这太复杂了,我无法在此处充分描述它。感谢所有的帮助和这个伟大的框架!
标签: django-models django-rest-framework