Почему я получаю значение 404 при тестировании представлений в django?

#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 . Итак, он работает сейчас. Большое спасибо.