Django служит нулевым байтовым ответом - PullRequest
0 голосов
/ 13 декабря 2011

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

enter image description here

Синтаксические ошибки в settings.py вызывают HTTP 500.
Синтаксические ошибки в urls.py ни на что не влияют - похоже, этот файл никогда не загружается.

Что такоетам проверить?

1 Ответ

0 голосов
/ 13 декабря 2011

Виновной была эта строка:

from django.contrib.auth.forms import AuthenticationForm

in middleware.py.

Перемещение импорта в функцию, которая использует AuthenticationForm, решило проблему:

from django.http import HttpResponseRedirect
from django.conf import settings
from django.contrib import messages
from django.contrib.auth import login
#from django.contrib.auth.forms import AuthenticationForm <-- THE LINE WAS HERE

class LoginFormMiddleware(object):
    def process_request(self, request):
        if request.method == 'POST' and 'is_top_login_form' in request.POST:
            from django.contrib.auth.forms import AuthenticationForm # <-- MOVED HERE

            form = AuthenticationForm(data=request.POST)
            is_valid = form.is_valid()

            if is_valid:
                login(request, form.get_user())

                program = request.user.get_profile().first_intern.program
                NavigationMiddleware.set_program(request, program)

                return HttpResponseRedirect('%s?quick' % program.get_absolute_url())

            else:
                messages.error(request, request.POST['username'], extra_tags='login')
                return HttpResponseRedirect(request.get_full_path())            

Я до сих пор не представляю, почему код работал, почему он вдруг сломался и почему это решило проблему.
В конце концов, в Python должна быть какая-то магия.

...