Django: 400 mauvaise syntaxe de requête - que signifie ce message?
j'utilise django pour construire un site Web simple. Lorsque vous tapez l'adresse de base (qui pour l'instant est 127.0.0.1:8000/
), j'utilise django pour afficher une vue qui fait quelques vérifications et les redirections en fonction de vos privilèges d'utilisateur. (Si vous avez des privilèges d'administrateur, vous accédez à /admin
, si vous ne vous sentez pas que vous allez à /home
, et si vous n'êtes pas connecté, vous accédez à /login
.)
quand je fais cette requête HTTP, je suis redirigé devrait mais je vois aussi les deux erreurs suivantes dans mon django log:
- code de 400, le message de requête incorrecte de syntaxe
('x16x03x01x00x95x01x00x00x91x03x01Nxaax9cx08x96x7fx92xe9Zx925xcaY4xa6xa5xabxf2x16xfaTx89xe7x8axc3x99J)6xfbxc44x00x00Hxc0')
"??N????Z?5?Y4?????T??ÙJ)6??4H?" 400 -
j'ai traduit l'hex dans le premier (espaces ajoutés pour la lisibilité): 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 &
je peux certainement voir pourquoi le serveur n'aimerait pas que ce soit une requête, mais je n'ai aucune idée d'où elle vient.
des idées?
Merci beaucoup.
==============
Voici le code de la vue:
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 réponses
pour répondre à votre question, cela se produit si vous essayez d'accéder au serveur django via https. Revenez à http et cette erreur disparaîtra.
Vous pouvez modifier ce middleware de maintenance pour obtenir le résultat, car il vérifie le statut de l'utilisateur avant de traiter les requêtes de contenu, ce qui semble plus djangonostique..
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
- je obtenir ce genre d'erreur quand je le lance:
manage.py runserver ...
au lieu de:
manage.py runfcgi ...
parce que je suis derrière Nginx.
lorsque vous utilisez runserver, il est à l'écoute des requêtes http Web standard. Lorsque vous utilisez runfcgi, il écoute un autre type de requête, en utilisant le protocole fastcgi au lieu du simple http.