運行 Django,我可以在 POST 請求中洗掉登錄用戶。
@login_required
def delete_user(request):
"""Delete user from DB."""
if request.method == "POST":
get_object_or_404(User, pk=request.user.pk).delete()
messages.success(request, _("User deleted!"), extra_tags="success")
return redirect("home")
return render(request, "accounts/delete-user.html")
HTML表單是:
<form method="POST" name="delete-user-form" id="delete-user-form">
{% csrf_token %}
<button class="mt-4 btn btn-danger" name="delete-user-btn" id="delete-user-btn" type="submit">{% translate "Delete my profile" %}</button>
</form>
我與用戶的測驗類:
class ViewsWithLoggedInUserTest(TestCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
User.objects.create_user(
email="[email protected]",
password="test",
first_name="TestFirstName",
last_name="TestLastName",
hometown="Kiev",
facebook_link="https://www.facebook.com/profile.php?id=1000",
contacts=" 380991111111",
start_coordinates="50.45, 30.52",
avatar="avatar/default_avatar.jpg",
)
def setUp(self):
self.user = User.objects.get(email="[email protected]")
self.client.force_login(user=self.user)
print("setUp")
def test_delete_user_post(self):
"""Test delete user post."""
response = self.client.post(path=reverse("delete_user"))
self.assertFalse(self.user)
self.assertEqual(response.status_code, 302)
self.assertRedirects(response, expected_url=reverse("home"))
我不明白如何測驗這個功能,我test_delete_user_post給了我
AssertionError: <User: [email protected]> is not false
uj5u.com熱心網友回復:
它不起作用,因為該變數self.user仍保留先前分配的值。
使用該refresh_from_db()方法用新值更新變數。
此外,要測驗洗掉,您必須測驗是否DoesNotExist引發了例外。測驗使用assertFalse將不起作用。
代碼示例:
def test_delete_user_post(self):
response = self.client.post(path=reverse("delete_user"))
with self.assertRaises(User.DoesNotExist):
# Django will try to fetch the new value from the database
# but since it's been deleted, DoesNotExist exception
# will be raised
self.user.refresh_from_db()
...
uj5u.com熱心網友回復:
一個(不那么復雜/更明顯?)替代xyres的答案
# setUp created self.user which this test should delete ...
def test_delete_user_post(self):
response = self.client.post(path=reverse("delete_user"))
self.assertFalse( User.objects.filter( pk=self.user.pk).exists() )
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/513956.html
