我已经写了一个view函数来处理包含来自django(labview)之外的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令牌,但是为什么在这种情况下测试通过了呢?
4条答案
按热度按时间fwzugrvs1#
测试客户端围绕CSRF功能工作。https://docs.djangoproject.com/en/1.9/ref/csrf/#testing
ruarlubt2#
如果您打算让视图接受来自应用外部来源的发布数据,则需要使用csrf_exempt使视图免受CSRF保护:
如果要执行此操作,则应使用其他方法验证请求
mjqavswn3#
如果您的视图应该接受来自外部源的
POST
,则您需要验证请求,因为每个POST
请求都需要具有CSRF令牌(请参阅:因此,出于您的目的,您必须使用@csrf_exempt
装饰器将视图从CSRF验证中排除,并使用类似Token Authentication的代码为请求编写您自己的验证1tuwyuhd4#
使用这一行获取绕过CSRF保护所需的装饰器:
然后将@csrf_exempt装饰器放在函数之前的行。