2016-02-18 2 views
3

Почтовые данные, которые я отправляю, записываются как пустые, если я использую промежуточное программное обеспечение, если я удаляю промежуточное программное обеспечение из файла settings.py, он возвращает данные сообщения. Что я делаю не так.django middleware making post request blank

enter image description here

Вот правильный результат, когда я удалить MiddleWare

enter image description here

Это средний код изделия: отступа может быть неправильно здесь

class CheckAuthorization(object): 
def process_request(self, request): 
    getKey = request.POST.get('authKey') 
    token = request.POST.get('token') 
    full_path = request.get_full_path() 
    if getKey is not None and getKey != '' and full_path != "https://stackoverflow.com/users/splash/": 
     try: 
      auth = TblAutherization.objects.get(secret_key = request.POST.get('authKey')) 
     except TblAutherization.DoesNotExist: 
      response = JsonResponse({'Status':'Error','Response code': 107,'Message':full_path}) 
      return HttpResponse(response, content_type='application/json') 
    else: 
     return None 
    if token is not None and token != '' and 'settoken' in request.session and full_path != "https://stackoverflow.com/users/splash/": 
     try: 
      auth = TblLoginAuth.objects.get(token = request.POST.get('token')) 
     except TblLoginAuth.DoesNotExist: 
      response = JsonResponse({'Status':'Error','Response code': 107,'Message':'Invalid Request'}) 
      return HttpResponse(response, content_type='application/json') 
    else: 
     return None 

views.py

def splash(request): 
if request.method == 'POST': 
    try: 
     appId = request.POST.get('appId') 
    except: 
     return Response({'Status':appId}) 

    gcmToken = request.POST.get('gcmToken') 
    deviceType = request.POST.get('deviceType') 
    userId = request.POST.get('userId') 
    loginStatus = request.POST.get('loginStatus') 
    appType=request.POST.get('appType') 
    return Response({'appId':appId,'gcmToken':gcmToken,'deviceType':deviceType}) 
else: 
    return Response({'appId':appId,'gcmToken':gcmToken,'deviceType':deviceType}) 

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

+0

«process_request» кажется правильным. На скриншоте ответ json имел ключ, но значение равно null. То есть логика вошла в место, где вы составили этот «json response». Возможно, вы должны проверить логику обработки представления '/ users/splash /'. Вы можете распечатать ответ до его возвращения. Кстати, у вас есть «process_response» в этом промежуточном программном обеспечении? –

+0

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

+0

Это странно. 'Request.POST' является экземпляром' MultiValueDict', это расширенный 'python dict'. Метод 'get' не очищает ключ и значение. Возможно, вы можете опубликовать обработку кода просмотра '/ users/splash /', и я могу взглянуть, если что-то не так. –

ответ

0

Я не эксперт в области промежуточного программного обеспечения, но я знаю, что мы используем в наших проектах и ​​ключевым отличием, что я см., что вы не возвращаете ответ на успешные случаи. Поэтому я вижу, что вы пытались: auth = blah, но вы не используете его. Таким образом, вы всегда возвращаете None или ошибку через HttpResponse(). А как насчет успеха?

+0

Да, я понимаю это и не возвращу ни одного в этом случае также в конце, который я пропустил для отправки здесь. но проблема прямо сейчас с этим промежуточным программным обеспечением заключается в том, что оба условия if являются ложными для этого запроса, что означает, что он переходит в другое состояние и не возвращает ни одного **, поэтому случай успеха не будет выполняться для этого запроса ** –

+0

Но если вы нажмете None через, тогда где ваши данные будут? – Macainian

+0

Мне не нужны данные для случая успеха, все, что мне нужно, это проверить в случае сбоя, и то, что делает process_request, как указано в документации. Он возвращает httpresponse или ни один, а в более позднем случае, затем он отправляется с запросом на представление –

3

У меня была та же проблема, когда я применял промежуточное программное обеспечение для ведения журнала. Похоже, что Django удаляет все данные из POST dict, если вы пытаетесь получить к нему доступ в промежуточном программном обеспечении. Idk, если это ошибка или функция, но я придумал временное решение: вы можете использовать request.body для получения данных.

body = request.body.decode('utf-8') # in python 3 json.loads only accepts unicode strings 
body = json.loads(body) 
content = body['content']