У меня вопрос о пространстве имен Django. Во-первых, я реализовал свою собственную систему аутентификации, поэтому у меня могут быть такие функции, как встроенное редактирование сайтов для аутентифицированных пользователей. По-моему, мне просто не нравилась настройка администратора по умолчанию.Загрязнение пространства имен Django?
Следовательно, я сознательно не включил никакие функции промежуточного программного обеспечения аутентификации или администратора.
В любом случае, у меня есть модель под названием User
в vxd.auth.models
, которую я использую в 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',
)
Если это уместно, работает Django 1.2.3 на Fedora.
Как я уже сказал, это работало отлично раньше. Я под сильным подозрением, что модель пользователя 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'
>>>
Так что что-то явно прокралось где-то.
Edit: аутентификация процессора контекст:
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()
Authentication Проверочный код:
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 *
По-видимому, я должен ждать 2 дня, прежде чем принять это, так что рассмотрим q все еще открытым. –
Извините, я не мог больше помочь - я пробивал источник Django для модулей, которые вы импортировали, и ни один из них, похоже, не импортировал «Пользователь». – girasquid