Python 如何将数据发布到测试客户端post请求中?
我正在编写一个测试,以查看表单数据是否在post请求中验证,并尝试创建post对象 测试.pyPython 如何将数据发布到测试客户端post请求中?,python,django,django-testing,Python,Django,Django Testing,我正在编写一个测试,以查看表单数据是否在post请求中验证,并尝试创建post对象 测试.py def setUp(self): user = User.objects.create_user(email='test@gmail.com', password='test', name='test') self.user = User.objects.get(email='test@gmail.com') self.client.login(email=user.email
def setUp(self):
user = User.objects.create_user(email='test@gmail.com', password='test', name='test')
self.user = User.objects.get(email='test@gmail.com')
self.client.login(email=user.email, password=user.password)
@tag('fast')
def test_index(self):
client = Client()
response = client.post(reverse('index'), data={'user': self.user, 'body': 'Test'}, follow=True)
print(response, self.user)
self.assertTrue(Post.objects.filter(body='Test').exists())
def index(request):
posts = Post.objects.all()
if request.method == 'POST':
form = NewPostForm(request.POST, request.FILES)
if form.is_valid():
new_post = form.save(commit=False)
new_post.user = user
new_post.save()
return redirect('index')
else:
form = NewPostForm(instance=None)
context = {
'form': form,
'posts': posts
}
return render(request, 'index.html', context=context)
但是测试失败,消息False为not true
,这意味着未创建主体为的对象“test”
。我已经尝试过用urlencode对数据进行编码,但没有任何帮助
下面是打印语句显示的内容:test
视图.py
def setUp(self):
user = User.objects.create_user(email='test@gmail.com', password='test', name='test')
self.user = User.objects.get(email='test@gmail.com')
self.client.login(email=user.email, password=user.password)
@tag('fast')
def test_index(self):
client = Client()
response = client.post(reverse('index'), data={'user': self.user, 'body': 'Test'}, follow=True)
print(response, self.user)
self.assertTrue(Post.objects.filter(body='Test').exists())
def index(request):
posts = Post.objects.all()
if request.method == 'POST':
form = NewPostForm(request.POST, request.FILES)
if form.is_valid():
new_post = form.save(commit=False)
new_post.user = user
new_post.save()
return redirect('index')
else:
form = NewPostForm(instance=None)
context = {
'form': form,
'posts': posts
}
return render(request, 'index.html', context=context)
可能用户没有被正确序列化,但当我将其从数据属性中删除(这意味着当前用户应该被分配到Post对象)时,我得到的结果基本相同。您可以尝试在请求的标头中添加
内容类型:application/json
正如上面的错误消息所示,它以纯文本形式显示您发送的请求。最后,我决定只测试它的有效响应,并将数据验证部分留给表单验证测试,下面是它现在的样子:
def test_index(self):
client = Client()
get_response = client.get('/home/', {}, True)
post_response = client.post(reverse('index'), data={'body': 'Test'}, follow=True)
self.assertEqual(get_response.status_code, 200)
self.assertEqual(post_response.status_code, 200)
如果有人有任何建议,我很乐意看到,因为我的问题仍然存在。尝试将其用作请求
client.post(reverse('index'),data=json.dumps({'body':'test')),follow=True,content_type='application/json')
,但得到了相同的结果,奇怪的是,我的请求仍然发送纯文本:
尝试删除数据中的json.dumps
,同时使用应用程序/json
头发送请求