2017-04-08 6 views
0

Ich habe Ansicht für die Bearbeitung von Benutzerprofil mit AJAX, ich überprüfe den Anfragetyp, wenn sein Beitrag nur JSON-Daten mit request.body bekommen. aber Django gibt mir einen Fehler: "Sie können nach dem Lesen aus dem Datenstrom der Anfrage nicht auf den Körper zugreifen". Offenbar kann ich nur auf Anfragedaten zugreifen, also wie überprüfe ich Anfragetyp, bevor ich den Körper lese. hier wird CodeDjango kann mehrmals auf Anfrage nicht zugreifen

vereinfachte Nachricht
def edit_profile(request): 
    if request.method == 'POST': 
     name = '' 
     email = '' 
     bio = '' 
     user_profile = User.objects.get(username=request.user.username) 

     try: 
      req_str = request.body.decode('utf-8') 
      req_json = json.loads(req_str) 

      name = req_json['username'] 
      email = req_json['email'] 
      bio = req_json['bio'] 

      if name: 
       user_profile.username = name 
      if email: 
       user_profile.email = email 
      if bio: 
       user_profile.account.bio = bio 

      user_profile.save() 
      user_profile.account.save() 
     except KeyError: 
      print("can't parse json") 
     except Exception as e: 
      print('fialed to proccess request', e) 

     return JsonResponse({ 
      'username': user_profile.username, 
      'email': user_profile.email, 
      'bio': user_profile.account.bio 
     }) 
    else: 
     return HttpResponse('nothing changed') 

voller Fehler:

Internal Server Error: /accounts/edit_profile/ 
Traceback (most recent call last): 
    File "/home/void/Projects/workspace/venv/lib/python3.4/site-packages/django/core/handlers/exception.py", line 42, in inner 
    response = get_response(request) 
    File "/home/void/Projects/workspace/venv/lib/python3.4/site-packages/django/core/handlers/base.py", line 187, in _get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "/home/void/Projects/workspace/venv/lib/python3.4/site-packages/django/core/handlers/base.py", line 185, in _get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "/home/void/Projects/workspace/workspace/accounts/views.py", line 79, in edit_profile 
    req_str = request.body.decode('utf-8') 
    File "/home/void/Projects/workspace/venv/lib/python3.4/site-packages/django/http/request.py", line 264, in body 
    raise RawPostDataException("You cannot access body after reading from request's data stream") 
django.http.request.RawPostDataException: You cannot access body after reading from request's data stream 
+0

Dieser Code würde nicht einmal funktionieren (Sie beziehen sich auf verschiedene Variablen in den Zeilen 3 und 4), aber wenn dies der Fall wäre, würde dies nicht den von Ihnen beanspruchten Fehler verursachen: Durch das Überprüfen der Request-Methode wird die Anfrage nicht gelesen. Bitte zeigen Sie den * tatsächlichen * Code, den Sie verwendet haben, und den vollständigen Fehler, den Sie bekommen haben. –

+1

Wo ist der vollständige Fehler und Traceback? –

+0

Das verdächtige ist, dass diese Ausnahme in Ihrer Ansicht von der Zeile "except Exception" abgefangen wurde. Haben Sie noch eine benutzerdefinierte Middleware, die sich möglicherweise störend auswirkt? –

Antwort

0

Ihre Middleware die request.body werden müssen Zugriff auf die den Fehler verursacht werden könnten, geben Sie bitte Ihre MIDDLEWARE_CLASSES für alle kundenspezifischen/Middle untersuchen, die zugreifen könnten Daten. Überprüfen Sie, ob jemand des Moduls/der App, das Sie in der Middleware verwenden, diesen Fehler hat.

Es gibt eine gute Erklärung hier. https://stackoverflow.com/a/28641930/3448851

Verwandte Themen