У меня есть фрагмент кода, который устанавливает атрибут запроса, когда пользователь посещает мой поддомен android
(показано ниже как часть home.devices.py
. Затем он подбирается в base.html
и используется для включения моего android-navbar.html
.Это отлично работает на всех мои страницы для logout.html
исключения. Это тот случай, или нет регистрируется пользователь в.Почему мое промежуточное ПО не устанавливает атрибуты запроса при выходе из системы?
Как вы можете видеть в шаблоне фрагменте из base.html
ниже Я вывода значения UA и субдомны на страницу и это работает правильно для всех других страниц, но ничего не возвращает на странице выхода.
Я также проверил, добавив assert False
, который срабатывает, если мой атрибут request.subdomain
не установлен в android
. Это не срабатывает, хотя, так ясно, что промежуточное ПО работает, но поддомены и переменные UA не доступны из моей страницы выхода.
Почему это происходит и как я могу это исправить?
Возможно соответствующие биты кода:
app.views
def logout(request):
auth.logout(request)
if not request.subdomain == 'android':
assert False
return render_to_response('registration/logout.html')
app.settings
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'home.device.MobileMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
)
шаблон base.html сниппет
...
{% if request.subdomain == 'android' %}
{% include 'home/android-navbar.html' %}
{% else %}
{% include 'home/navbar.html' %}
{% endif %}
{% endblock %}
</div>
<div>UA is: {{ request.ua_full }}</div>
<div>Subdomain is: {{ request.subdomain }}</div>
....
home.devices. py
# list of mobile User Agents
mobile_uas = [
'w3c ','acs-','alav','alca','amoi','audi','avan','benq','bird','blac',
'blaz','brew','cell','cldc','cmd-','dang','doco','eric','hipt','inno',
'ipaq','java','jigs','kddi','keji','leno','lg-c','lg-d','lg-g','lge-',
'maui','maxo','midp','mits','mmef','mobi','mot-','moto','mwbp','nec-',
'newt','noki','oper','palm','pana','pant','phil','play','port','prox',
'qwap','sage','sams','sany','sch-','sec-','send','seri','sgh-','shar',
'sie-','siem','smal','smar','sony','sph-','symb','t-mo','teli','tim-',
'tosh','tsm-','upg1','upsi','vk-v','voda','wap-','wapa','wapi','wapp',
'wapr','webc','winw','winw','xda','xda-'
]
mobile_ua_hints = [ 'SymbianOS', 'Opera Mini', 'iPhone', 'Mobile Safari' ]
def is_mobile(request):
''' Super simple device detection, returns True for mobile devices '''
mobile_browser = False
ua = request.META['HTTP_USER_AGENT'].lower()[0:4]
ua_full = request.META['HTTP_USER_AGENT']
if (ua in mobile_uas):
mobile_browser = True
else:
for hint in mobile_ua_hints:
if request.META['HTTP_USER_AGENT'].find(hint) > 0:
mobile_browser = True
return mobile_browser
def get_ua(request):
''' Return the name of the user agent '''
ua_full = request.META['HTTP_USER_AGENT']
return ua_full
def get_subdomain(request):
subdomain = request.META['HTTP_HOST'].split('.')[0]
return subdomain
class MobileMiddleware(object):
def __init__(self):
pass
def process_request(self, request):
request.mobile = is_mobile(request)
request.ua_full = get_ua(request)
request.subdomain = get_subdomain(request)
return