2016-05-24 7 views
1

Я написал функцию просмотра, которая обрабатывает почтовый запрос, содержащий данные json, из источника вне django (labview). Я просто тестирование его, чтобы начать с, так это выглядит, как этотDjango получает запрос json post от внешнего источника

def post_entry(request): 
    '''Process incoming json string 
    ''' 

    if request.method == 'POST': 

     post_data = request.body 

    # Return a response 
    return HttpResponse('data received OK') 

я написал тест, чтобы проверить это, и она проходит нормально:

def test_post_entry_view_good_post_data(self): 
    '''post_entry view should return a 200 status if valid 
    ''' 

    data = {'DHTP Data': ['10', '50.296', '50.94', '50.418', '50.425', '50.431', '50.94'], 
     'Test String': 'My Test String'} 

    request_url = reverse('post_entry') 
    response = self.client.post(request_url, content_type='application/json', 
     data=dumps(data)) 

    # Should return a 200 response indicating ok 
    self.assertEqual(response.status_code, 200) 

Но когда LabVIEW сообщений данных post_entry возвращается 403 запрещенная ошибка. Я думаю, это связано с тем, что токен csrf не присутствует, но почему тест проходит в этом случае?

ответ

1

Если вы будете иметь представление, которое принимает почтовые данные из источника, внешнего для вашего приложения вам нужно сделать ваш взгляд освобожден от защиты CSRF с помощью csrf_exempt:

@csrf_exempt 
def post_entry(request): 
    '''Process incoming json string 
    ''' 

Если вы собираетесь для этого вам следует использовать какой-либо другой метод проверки запроса.

1

Если ваше мнение должно принимать POST из внешних источников, вам необходимо проверить запрос, поскольку каждый запрос POST необходим для использования токена CSRF (см. : CSRF). Следовательно, для вашей цели вам придется освободить представление от проверки CSRF с помощью декоратора @csrf_exempt и написать свою собственную проверку для запроса, используя что-то вроде Token Authentication