#python #django
#python #django
Вопрос:
Я пишу тестовый класс для тестирования моего представления регистрации. Я протестировал get
метод, но post
, похоже, выдает ошибку. Пожалуйста, помогите мне:
Вот мой tests.py:
class ViewsTest(TestCase):
def setUp(self):
self.client = Client()
def test_register(self):
url = reverse('register')
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
response = self.client.post('/',
{
'first_name': 'john',
'last_name': 'doe',
'email': 'johndoe@gmail.com',
'password': 'johndoe'
})
self.assertEqual(response.status_code, 302)
Вот мой urls.py:
url(r'^register/', views.register, name='register'),
Вот мой views.py:
def register(request):
if request.method == 'POST':
user_form = CustomUserCreationForm(data=request.POST)
if user_form.is_valid():
ob = CustomUserCreationForm.register(user_form)
if ob.is_active is False and ob.is_staff is False:
return render(request, 'todoapp/waiting.html')
else:
return render(request, 'todoapp/admin_success.html')
else:
return render(request, 'todoapp/register.html', {'errors': user_form.errors})
return render(request, 'todoapp/register.html', {'form': CustomUserCreationForm()})
Вот ошибка, которую я получаю:
self.assertEqual(response.status_code, 302)
AssertionError: 404 != 302
Комментарии:
1. Вы уверены, что на самом деле намереваетесь отправить запрос post на /, а не обратный URL (‘register’)? Если это так, замените ‘/’ на
url
. Помимо этого, для дальнейшей отладки я бы, вероятно, попытался зарегистрировать тело ответа 404, чтобы посмотреть, содержит ли подробный ответ отладки Django что-нибудь полезное.
Ответ №1:
Здесь вы должны передать url
вместо ‘/’ клиент не может найти URL, следовательно, возвращает 404
response = self.client.post(url,
{
'first_name': 'john',
'last_name': 'doe',
'email': 'johndoe@gmail.com',
'password': 'johndoe'
})
Комментарии:
1. вы правы. Он работает сейчас, а также
302
предназначен для перенаправления и200
по сути означает OK, и поскольку я используюrender
, я использовал код состояния как200
. Итак, он работает сейчас. Большое спасибо.