私のログインが正しいページにリダイレクトされているかどうかを確認するテストを書こうとしています。現時点では私が働いていない、このコードを使用しています:ログインのリダイレクトのテスト
class TestAuth(TestCase):
def setUp(self):
self.client = Client()
@classmethod
def setUpTestData(cls):
user_login = get_user_model().objects.create(username='admin', email='[email protected]', password='asdf1234')
cls.user_login = user_login
def test_login_redirect(self):
response = self.client.post(
reverse('udt:login'),
{
'username': 'admin',
'password': 'asdf1234'
}
)
self.assertRedirects(response, reverse('udt:table_list'))
udt:login
は'/udt/accounts/login/'
に相当し、udt:table_list
は'/udt/table/'
に相当ところ。
ログイン機能は、カスタムテンプレートを使用したDjangoの組み込みログインです。私は、テストを実行すると、私は次のエラーを取得する:
AssertionError: 200 != 302 : Response didn't redirect as expected: Response code was 200 (expected 302)
私は実際にアプリでのログイン機能をテストする場合しかし、私はこれを取得:
[2017/05/30 14:43:22] HTTP POST /udt/accounts/login/ 302 [0.13, 127.0.0.1:60127]
[2017/05/30 14:43:22] HTTP GET /udt/table/ 200 [0.15, 127.0.0.1:60127]
それが実際にあるように私には思われます正しくリダイレクトされます。
私の質問はアサーションエラーの原因となっているテストで間違っていますか?私はDjangoでテストするのはかなり新しいので、私は行方不明になっているかもしれませんが、テストが私に渡されるはずです。
これについてのお手伝いがあれば幸いです。
UPDATE
はログインテンプレートは、この(ちょうど標準Djangoのログインテンプレートを取り、それにいくつかのブートストラップクラス名を追加しました)のようになります。ログインの
{% load bootstrap3 %}
<form id="login-form" method="post" action="{% url 'udt:login' %}">
{% csrf_token %}
<table class="table">
<tr>
<td><label for="id_username">Username</label></td>
<td><input id="id_username" name="username" type="text" class="form-control"></td>
</tr>
<tr>
<td><label for="id_password">Password</label></td>
<td><input id="id_password" name="password" type="password" class="form-control"></td>
</tr>
</table>
{% if form.errors %}
<p class=" label label-danger">
Your username and password didn't match.
Please try again.
</p>
{% endif %}
<input type="submit" value="Login" class="btn btn-primary pull-right" />
<input type="hidden" name="next" value="{{ next }}" />
</form>
URLはそうのようになります。
url(r'^login/$', auth_views.login, {'template_name': 'auth/login.html'}, name='login')
私はDjango v.1.11.1を使用しています。
あなたがやっていることを達成する最良の方法は、単にこの行をあなたのsettings.py 'LOGIN_REDIRECT_URL = '/ YourSite /''に入れていることだと思います。これは100%動作します。 – hansTheFranz
私はそれを既にsettings.pyに持っていますが、私はまだ同じエラーが発生しているので、なぜそれが起こっているのか分かりません! – BeeNag
この場合、私は何が間違っているのかごめんなさい。経験豊かなユーザーが私たちを教えてくれることを願っています。 – hansTheFranz