我编写了一个视图函数来处理包含来自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令牌存在,但为什么测试在这种情况下通过?
答案 0 :(得分:3)
测试客户端围绕CSRF功能工作。见https://docs.djangoproject.com/en/1.9/ref/csrf/#testing
答案 1 :(得分:2)
如果您的视图接受来自应用外部来源的帖子数据,则需要使用csrf_exempt使您的视图免于CSRF保护:
@csrf_exempt
def post_entry(request):
'''Process incoming json string
'''
如果您要这样做,您应该使用其他一些验证请求的方法
答案 2 :(得分:2)
如果您的视图应该接受来自外部源的POST
,那么您需要验证请求,因为每个POST
请求都需要具有CSRF令牌(请参阅:CSRF) 。因此,出于您的目的,您必须使用@csrf_exempt
装饰器免除CSRF验证的视图,并使用类似Token Authentication