【发布时间】:2011-06-04 22:27:34
【问题描述】:
我有一个关于 Django 命名空间的问题。首先,我实现了自己的身份验证系统,因此我可以为经过身份验证的用户提供内联站点编辑等功能。坦率地说,我只是不喜欢默认的管理员设置。
因此,我有意识地没有包含任何身份验证中间件或管理功能。
无论如何,我在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"...
当然没有,我的User 模型没有实现名字字段。然而,Django 的却可以。
这不是问题,直到我升级 Django 并被CSRF middleware issue 击中...
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 User 模型默认包含在某处。
这是怎么回事,有人知道吗?一种解决方案是重命名 vxd.auth,我怀疑这会解决问题。
各种人的调试建议的更新(顺便感谢!): * 是的,我试过删除表格。我什至可以像这样通过 shell 操作我的对象:
$ 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):
from datetime import date, datetime, timedelta
from vennarddjango.auth.control import *
导入(control.py):
from django.db import models
from django.contrib.sessions.models import *
from django.utils.datastructures import MultiValueDictKeyError
import hashlib
import datetime
from vxd.auth.models import *
from vxd.auth.openid.store import *
from vxd.auth.openid.methods import *
from vxd.utility.datetimefuncs import *
from vxd.utility.hashwrapper import *
【问题讨论】:
标签: python django django-models fedora