Подтвердить что ты не робот

Django: 400 синтаксис синтаксиса запроса - что означает это сообщение?

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

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

  • код 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' )
  • "?? N???? Z? 5? У4????? Т?? мкДж) 6?? 4H?" 400 -

Я перевел hex в первом, чтобы быть (пробелы добавлены для удобочитаемости): 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 с 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')
4b9b3361

Ответ 1

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

Ответ 2

Вы можете реорганизовать это промежуточное программное обеспечение для обслуживания, чтобы достичь результата, потому что он проверяет статус пользователя ПЕРЕД обработкой запросов контента, что кажется более 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

Ответ 3

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

manage.py runserver ...

вместо:

manage.py runfcgi ...

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

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