Django: 400 синтаксис неправильных запросов - что означает это сообщение? - PullRequest
54 голосов
/ 28 октября 2011

Я использую Django для создания простого сайта.Когда вы вводите базовый адрес (на данный момент 127.0.0.1:8000/), я использую django, чтобы показать представление, которое выполняет некоторые проверки и перенаправляет вас на основе ваших пользовательских привилегий.(Если у вас есть права администратора, вы переходите на /admin, если вы не переходите на /home, а если вы не вошли в систему, вы переходите на /login.)

Когда ясделать этот HTTP-запрос, я перенаправлен , как я должен , но я также вижу следующие две ошибки в моем журнале django:

  1. код 400, сообщение Синтаксис неправильного запроса ('\x16\x03\x01\x00\x95\x01\x00\x00\x91\x03\x01N\xaa\x9c\x08\x96\x7f\x92\xe9Z\x925\xcaY4\xa6\xa5\xab\xf2\x16\xfaT\x89\xe7\x8a\xc3\x99J)6\xfb\xc44\x00\x00H\xc0')
  2. "??N????Z?5?Y4?????T??ÙJ)6??4H?" 400 -

Я перевел гекс в первом из них (пробелы добавлены для удобочитаемости): SYN ETX NUL NUL U SOH NUL NUL Q ETX NUL N 170 156 X r 246 STX 141 214 ? 143 EOT FS j 142 223 s 241 220 < 185 \ \ m 242 &

Я, конечно, могу понять, почему серверне хотел бы этого как запрос, но я понятия не имею, откуда он.

Есть идеи?

Большое спасибо.

==============

Вот код для представления:

def index(request):
    user = request.user
    admin_courses = []

    if (user.is_authenticated()):
        u_id = user.getUserId()
        my_enrollment = Enrollment.objects.filter(user_id=u_id)
        admin_enrollment = my_enrollment.filter(type="ADMIN")
        for enr in admin_enrollment:
            course = Course.objects.get(id=enr.getCourseId())
            admin_courses.append(course)
        if (len(admin_courses)>0):
            return HttpResponseRedirect('/admin')
        else:
            return HttpResponseRedirect('/home')
    return HttpResponseRedirect('/login')

Ответы [ 3 ]

93 голосов
/ 30 декабря 2011

Чтобы ответить на ваш актуальный вопрос, это происходит, если вы пытаетесь получить доступ к серверу django через https. Переключитесь обратно на http, и эта ошибка исчезнет.

4 голосов
/ 19 июня 2014

Я получаю такую ​​ошибку при запуске:

manage.py runserver ...

вместо:

manage.py runfcgi ...

, потому что я за Nginx.

Когда вы используетеrunserver, он слушает стандартные веб-запросы http.Когда вы используете runfcgi, он прослушивает другой тип запроса, используя протокол fastcgi вместо простого http.

3 голосов
/ 28 октября 2011

Вы можете провести рефакторинг этого промежуточного программного обеспечения для достижения результата, потому что он проверяет статус пользователя ДО обработки запросов контента, который кажется более djangonostic ..

import settings
from django.http import HttpResponseRedirect


class MaintenanceModeMiddleware(object):
    """
    Maintenance mode for django

    If an anonymous user requests a page, he/she is redirected to the
    maintenance page.
    """
    def process_request(self, request):

        is_login = request.path in (
            settings.LOGIN_REDIRECT_URL,
            settings.LOGIN_URL,
            settings.LOGOUT_URL,
            settings.MAINTENANCE_PATH,
        )
        if (not is_login) and settings.MAINTENANCE and (not request.user.is_authenticated()):
            return HttpResponseRedirect(settings.MAINTENANCE_PATH)
        return None
...