Почему добавление этих констант в мой шаблон позволяет мне войти в систему? - PullRequest
2 голосов
/ 19 августа 2010

Я написал обертку вокруг render_to_response, которая выглядит следующим образом

from app import constants

def response(request, template, vars={}):
    if '.' not in template:
        template += '.html'
    template_vars = {}

    for constant in dir(constants):
        if constant[:2] == '__': continue
        template_vars[constant] = getattr(constants, constant) # BUG: causes you to stay logged in
    template_vars.update({'settings':settings})
    template_vars.update({'request':request})
    template_vars.update(vars)

    return render_to_response(template, template_vars, context_instance=RequestContext(request))

Кажется, что, добавляя константы в переменные шаблона, user.is_authenticated всегда возвращает true в шаблоне, а user.usernameполучает значение от какого-то случайного пользователя (недавно зарегистрированного или что-то в этом роде).Просто интересно, почему это так?

Кто-нибудь захочет объяснить?

Если я напечатаю константы, это они

BidReasons
BidStatuses
CA_PROVINCES
COUNTRIES
CancellationRequestStatuses
EMAIL_NOTIFICATIONS
Enum
Flags
InvoiceStatuses
NA_REGIONS
PaymentMethods
PaymentTimes
PaymentTypes
SELECT_OPTION
SecretKeyPurposes
Sequence
ServiceTypes
ShipmentStatuses
USER_RATINGS
US_STATES
VehicleListingOptions
WeekDays
YES_OR_NO

Я не вижу там ничего такого, чтобудет связываться с user


Мое новое исправление, если интересно:

def response(request, template, vars={}):
    if '.' not in template:
        template += '.html'

    template_vars = {'settings':settings, 'request':request, 'constants':constants.__dict__}
    template_vars.update(vars)

    return render_to_response(template, template_vars, context_instance=RequestContext(request))

1 Ответ

1 голос
/ 19 августа 2010

На самом деле не имеет отношения к вашему вопросу, но если вы хотите добавить переменные в контекст шаблона, вместо вызова отдельной функции в каждом представлении, вы можете захотеть взглянуть на обработчики контекста , которые делают то же самоеавтоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...