Python Django名称空间污染?
我对Django的名称空间有一个问题。首先,我实现了自己的身份验证系统,这样就可以为经过身份验证的用户提供在线站点编辑等功能。坦率地说,我只是不喜欢默认的管理员设置 因此,我有意识地没有包括任何身份验证中间件或管理功能 无论如何,我在Python Django名称空间污染?,python,django,django-models,fedora,Python,Django,Django Models,Fedora,我对Django的名称空间有一个问题。首先,我实现了自己的身份验证系统,这样就可以为经过身份验证的用户提供在线站点编辑等功能。坦率地说,我只是不喜欢默认的管理员设置 因此,我有意识地没有包括任何身份验证中间件或管理功能 无论如何,我在vxd.auth.models中有一个名为User的模型,我在vxd.auth.control中使用它来读取系统的数据库。当我运行身份验证检查时,出现以下错误: DatabaseError at / column auth_user.first_name does
vxd.auth.models
中有一个名为User
的模型,我在vxd.auth.control
中使用它来读取系统的数据库。当我运行身份验证检查时,出现以下错误:
DatabaseError at /
column auth_user.first_name does not exist
LINE 1: SELECT "auth_user"."id", "auth_user"."username", "auth_user"...
当然不是,我的用户
模型没有实现名字字段。然而,Django's确实如此
这不是一个问题,直到我升级Django并被
settings.py的相关部分:
TEMPLATE_LOADERS = ( 'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
AUTHENTICATION_BACKENDS = ('')
TEMPLATE_CONTEXT_PROCESSORS = ( "vxd.auth.contexts.Authentication", )
INSTALLED_APPS = (
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'reversetag',
'markitup',
'vxd.auth',
'Testbed.authadmin',
'Testbed.testapp',
)
如果相关,请在Fedora上运行Django 1.2.3
正如我所说的,这在以前工作得很好。我强烈怀疑django用户模型默认包含在某个地方
发生了什么事,有人知道吗?一个解决方案是重命名vxd.auth
,我怀疑这会解决问题
更新各种人的调试建议(顺便说一句,谢谢!):
*是的,我试过放下桌子。我甚至可以通过外壳操纵我的对象,如下所示:
$ python manage.py shell
>>> from vxd.auth.models import *
>>> u = User.objects.get(username="admin")
>>> print u
User object
>>> u.blue
u'baa26f39c47dd222a04aa8123b141e62ef5e0cffa658207b0754f811e6444ab9'
>>>
所以很明显有什么东西潜入了某个地方
编辑:身份验证上下文处理器:
def Authentication(request):
if AuthenticationCheck(sess=request.session, timeofaction=datetime.datetime.now(), ipaddress=request.META['REMOTE_ADDR']) == True:
return dict({'username': request.session["username"]})
else:
return dict()
身份验证检查代码:
def AuthenticationCheck(sess, timeofaction, ipaddress):
try:
user = sess.get("username", None)
if user is None:
return False
else:
pass
except MultiValueDictKeyError:
# not a session object
# or no such key exists.
return False
# some computations based on sess variables which are set when login happens
# these are non-conflicting keys unless sess["vxd-blue"] is used elsewhere...
# Find "User" from DB.
print "User is " + user
#try: # don't catch so I can see the error
usr = User.objects.get(username=user) # this throws the exception shown.
导入(contexts.py):
导入(control.py):
在创建
vxd.auth
之前,是否安装了contrib.auth
的syncdb
?看起来您的表结构可能已过时。如果可行,请尝试删除auth_user
表,然后重新同步,看看这是否解决了问题。在创建vxd.auth
之前是否安装了contrib.auth
?看起来您的表结构可能已过时。如果可行,请尝试删除auth\u user
表,然后重新同步,看看这是否解决了问题。我通过将vxd.auth
重构为vxd.myauth
来解决问题。django的任何部分在请求auth_user
时出错,现在都不是了。对名称空间污染没有太大印象,但没关系。我通过将vxd.auth
重构为vxd.myauth
修复了它。django的任何部分在请求auth_user
时出错,现在都不是了。对名称空间污染没有太大印象,但没关系。您可以编辑django
源代码,并在导入django.contrib.auth.models
时进入pdb
会话,然后跟踪跟踪,直到找到罪犯。在该文件的顶部弹出以下内容
import pdb; pdb.set_trace()
然后,在出现的提示下,键入
tb
。(或者bt
,我永远记不清是哪个)。您可以编辑django
源代码,并在导入django.contrib.auth.models
时进入pdb
会话,然后跟踪追踪,直到找到罪犯。在该文件的顶部弹出以下内容
import pdb; pdb.set_trace()
然后,在出现的提示下,键入
tb
。(或者,bt
,我永远记不清是哪个)。是的,我想这可能是个问题。我有一个脚本,可以删除所有表并用默认数据重新加载它们。愚蠢的是,这种代码实际上是有效的。但是,在我的项目中的某个地方,出现了一些问题……您能粘贴身份验证
上下文处理器的内容吗?您能粘贴上下文处理器.py的导入语句吗?似乎它可能在某处导入了错误的用户
模型。是的,我认为这可能是个问题。我有一个脚本,可以删除所有表并用默认数据重新加载它们。愚蠢的是,这种代码实际上是有效的。但是,在我的项目中的某个地方,出现了一些问题……您能粘贴身份验证
上下文处理器的内容吗?您能粘贴上下文处理器.py的导入语句吗?看起来它可能正在导入错误的<代码>用户< /C>模式。显然,我必须等待2天才能接受这一点,所以考虑到Q仍然打开。抱歉,我不能帮助更多——我通过Django源插入您正在导入的模块,而且他们中的任何一个似乎都没有导入<代码>用户< /代码>。显然我必须等待2天才接受这个,所以考虑Q仍然打开。抱歉我不能帮助更多-我拨通了Django源,为您导入的模块,也没有一个似乎是导入<代码>用户< /代码>。我可以给一个去,非常感谢。无论如何,我现在已经重构了,但我会在某个时候还原并尝试一下。我可能会尝试一下,非常感谢。无论如何,我现在已经重构了,但我会在某个时候恢复并尝试。
import pdb; pdb.set_trace()