Django: 400 hatalı istek sözdizimi - bu mesaj ne anlama geliyor?

Basit bir web sitesi oluşturmak için django kullanıyorum. Temel adresi yazdığınız zaman (şu an için 127.0.0.1:8000/), kullanıcı denetimlerinize bağlı olarak bazı çekleri yapan ve yeniden yönlendiren bir görünümü göstermek için django'yu kullanıyorum. (Yönetici ayrıcalıklarınız varsa, /home 'a gitmezseniz /admin ' e gidersiniz ve eğer giriş yapmadıysanız < code>/login .)

Bu HTTP isteğini oluşturduğumda yönlendirmeliyim 'e yönlendirilirim ancak aynı zamanda django günlüğümde şu iki hatayı görüyorum:

  1. code 400, message Bad request syntax ('\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 -

I translated the hex in the first one to be (spaces added for legibility): 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 &

Sunucunun neden bir istek olarak bunu istemediğini kesinlikle görebiliyorum ama nereden geldiğini bilmiyorum.

Herhangi bir fikir?

Çok teşekkürler.

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

İşte görünümün kodu:

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')
44
Yönlendirmelerinize takip eden bir eğik çizgi eklemeyi denediniz mi?
katma yazar Hedde van der Heide, kaynak
Belki de görünümün kodunu göstermelisiniz.
katma yazar Daniel Roseman, kaynak
Evet, hiçbir şey değişmez. Yine de iyi fikir.
katma yazar Miriam, kaynak

3 cevap

Asıl sorunuzu yanıtlamak için, https üzerinden django sunucusuna erişmeye çalışıyorsanız bu gerçekleşir. Http'a geri dönün ve bu hata ortadan kalkar.

82
katma

Sonuç elde etmek için bu bakım ara katmanını yeniden düzenleyebilir, çünkü daha fazla djangonostic gibi görünen içerik isteklerini işlemeden ÖNCE kullanıcı durumunu kontrol eder.

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
katma
Kesinlikle haklısın; Bu daha iyi bir django stratejisidir. Teşekkürler!
katma yazar Miriam, kaynak

Çalıştığımda bu tür bir hatayı alıyorum:

manage.py runserver ...

yerine:

manage.py runfcgi ...

çünkü Nginx’in arkasındayım.

Runserver kullandığınızda, standart http web isteklerini dinliyor. Runfcgi kullandığınızda, düz http yerine fastcgi protokolünü kullanarak farklı bir istek türü dinler.

3
katma
python3 manage.py runfcgi 0.0.0.0:8001 Bilinmeyen komut: 'runfcgi' Kullanım için 'manage.py yardım' yazın.
katma yazar Gank, kaynak
Hmmm. Bu cevabın niçin bir düşüş aldığını merak ediyorum ...
katma yazar Mnebuerquo, kaynak