У меня, похоже, та же проблема, что и в этом вопросе: Проблема выхода Django
Мина немного страннее, она работает в google chrome.... но не в firefox...
это моя функция выхода: (в views.py)
def my_logout(request):
logger.debug("Logout called by user")
try:
# Here I do some custom stuff, like logging this action in a database and so on
# For this question it shouldn't matter... because in a try catch
# so whatever goes wrong here, logging out should work anyway
except Exception, e:
logger.info("Logging logout action error: %s" % e)
logout(request)
return HttpResponseRedirect("/")
в settings.py У меня есть:
LOGIN_URL = '/desktop/login/'
LOGOUT_URL = '/desktop/logout/'
LOGIN_REDIRECT_URL = '/'
И в urls.py приложения iamapps (включить в проект urls как /desktop/ ):
url(r'^login/$', 'iamapps.views.my_login', name='iamapps.login'),
url(r'^logout/$', 'iamapps.views.my_logout', name='iamapps.logout'),
Дополнительная информация:
- django 1.4.3 (только что обновлено с 1.3 до 1.4....)
- python 2.7
- работает в Chrome, но не в Firefox 17.0.1, Linux
Тот факт, что он работает в google chrome, но не работает в firefox, больше всего меня зовут. Кажется, что это имеет какое-то отношение к тому, что firefox запоминает пользователя как зарегистрированного...
EDIT: Я получаю сломанную трубку.... но я, кажется, не получаю ее не при выходе из системы... но иду к домашнему виду после выхода из системы.
Traceback (most recent call last):
File "/usr/lib/python2.7/wsgiref/handlers.py", line 86, in run
self.finish_response()
File "/usr/lib/python2.7/wsgiref/handlers.py", line 127, in finish_response
self.write(data)
File "/usr/lib/python2.7/wsgiref/handlers.py", line 210, in write
self.send_headers()
File "/usr/lib/python2.7/wsgiref/handlers.py", line 268, in send_headers
self.send_preamble()
File "/usr/lib/python2.7/wsgiref/handlers.py", line 192, in send_preamble
'Date: %s\r\n' % format_date_time(time.time())
File "/usr/lib/python2.7/socket.py", line 324, in write
self.flush()
File "/usr/lib/python2.7/socket.py", line 303, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe
----------------------------------------
Exception happened during processing of request from ('127.0.0.1', 58684)
Traceback (most recent call last):
File "/usr/lib/python2.7/SocketServer.py", line 582, in process_request_thread
self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 323, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/media/storage/django/sites/iamfloraservice/parts/django/django/core/servers/basehttp.py", line 139, in __init__
super(WSGIRequestHandler, self).__init__(*args, **kwargs)
File "/usr/lib/python2.7/SocketServer.py", line 641, in __init__
self.finish()
File "/usr/lib/python2.7/SocketServer.py", line 694, in finish
self.wfile.flush()
File "/usr/lib/python2.7/socket.py", line 303, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe
----------------------------------------
[24/Dec/2012 14:33:25] "GET / HTTP/1.1" 200 48247
Изменить 2 он переходит к этому виду после выхода из системы и перенаправляется:
def home(request, template='iamfloraservice/home.html'):
logger.debug("Home view called by user %s" % request.user)
return render_to_response(template,{},context_instance=RequestContext(request))
Я думаю, что перенаправление с запросом на это мнение вызывает проблему. В log sais это все еще пользовательский "michel" (beacuse the view использует запрос от перенаправления, и у него был пользователь michel)... однако... пользовательский michel выходит из системы в среднее время....
РЕДАКТИРОВАТЬ 3
из-за предложения, вызванного регистратором. незаметный журнал не помогает И это регистратор по умолчанию:
import logging
logger = logging.getLogger(__name__)
РЕДАКТИРОВАТЬ 4 (30-12-2012)
Мой выход из главного окна, где я показываю ссылку на выход, когда пользователь вошел в систему, и ссылку для входа в систему, если пользователь вышел из системы. Также он содержит панель инструментов, инструменты которой заполняются в зависимости от пользователя и членства в группах.
Я думаю, проблема в том, что она перезагружает это главное окно, пока кеш и пользователь в этом запросе еще не очищены. Как-то Хром знает, как справиться с этим, и firefox приводит к ошибке с поврежденной трубкой. Очистка кеша вручную в браузере приводит к правильному представлению после перезагрузки....
решение может быть перенаправлено на страницу без чего-либо в ней, содержащего пользователей... или выясните, как очистить кеш в нужный момент myselve....
эта проблема описывает, может быть, одно и то же... но я не могу ожидать, что пользователи сделают что-нибудь в браузере только для выхода из системы? см. django 1.4 кэширование GET to/login/
Изменить 5 (31-12-2012)
Кажется, это проблема кэширования... но не уверен, как это исправить.
это мои настройки кэширования:
if not DEBUG:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
else:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
}
}
Но я тоже пробовал без dummycache
РЕДАКТИРОВАТЬ 6 (4-я-2013) Все еще нет решения.... Я изменил способ, которым я выхожу на путь джанго, и теперь я использую сигналы... см. Мой собственный ответ ниже.
но все же он дает ошибку со сломанной трубкой, которая вызывает остановку firefox. Это не проблема кэширования. Если я перейду на другую страницу или, что еще хуже, страницы администратора. Я все еще вошел в систему. Единственный способ выйти из системы - выйти на страницу администрирования.... Если это не пользователь-администратор... нет способа заставить меня выйти из браузера Firefox.
При отходе от использования интерфейса администратора, поэтому сигнал работает нормально...
Я проверил, выключив сигнал.... и все же выключение в firefox не работает.
Заключение: возврат к главной странице() вызывает проблему.
EDIT 7 (4 января 2013 г.) Я сделал простой просмотр журнала для тестирования, этот шаблон:
<html>
<head>
<title>
Logged out
</title>
</head>
<body>
You are succesfully logged out.<br>
<br>
<a href="/">Go back to the main page</a>
or<br>
<a href="/desktop/login/?next=/">log in again</a>
</body>
</html>
и просмотренный вид:
class LoggedOutView(TemplateView):
template_name = "iamapps/logged_out.html"
и изменил URL-адреса на:
url(r'^logout/$', 'django.contrib.auth.views.logout', {'next_page': '/desktop/loggedout/'}, name='iamapps.logout'),
#url(r'^logout/$', 'django.contrib.auth.views.logout_then_login', name='iamapps.logout'),
url(r'^loggedout/$', LoggedOutView.as_view(),name='iamapps.loggedout'),
и все же, для простых вещей... У меня отключены сигналы.
и он все еще не работает в firefox.... но он работает в chrome
В firefox он не переходит на страницу с завершенным протоколом