feat: login redirection
This commit is contained in:
+48
-15
@@ -1,12 +1,11 @@
|
|||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.shortcuts import reverse
|
from django.shortcuts import reverse
|
||||||
from rest_framework import status
|
from django.test import TestCase
|
||||||
from rest_framework.test import APITestCase
|
|
||||||
|
|
||||||
User = get_user_model()
|
User = get_user_model()
|
||||||
|
|
||||||
|
|
||||||
class TestLogin(APITestCase):
|
class TestLogin(TestCase):
|
||||||
def setUp(self) -> None:
|
def setUp(self) -> None:
|
||||||
self.password = "theonering"
|
self.password = "theonering"
|
||||||
self.user = User.objects.create(
|
self.user = User.objects.create(
|
||||||
@@ -26,12 +25,12 @@ class TestLogin(APITestCase):
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
assert response.status_code == status.HTTP_302_FOUND
|
assert response.status_code == 302
|
||||||
assert response.url == reverse("web:index")
|
assert response.url == reverse("web:index")
|
||||||
|
|
||||||
def test_login_get(self):
|
def test_login_get(self):
|
||||||
response = self.client.get(reverse("web:login"))
|
response = self.client.get(reverse("web:login"))
|
||||||
assert response.status_code == status.HTTP_200_OK
|
assert response.status_code == 200
|
||||||
|
|
||||||
def test_login_already_logged_in(self):
|
def test_login_already_logged_in(self):
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
@@ -42,11 +41,11 @@ class TestLogin(APITestCase):
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
assert response.status_code == status.HTTP_302_FOUND
|
assert response.status_code == 302
|
||||||
assert response.url == reverse("web:index")
|
assert response.url == reverse("web:index")
|
||||||
|
|
||||||
response = self.client.get(reverse("web:login"))
|
response = self.client.get(reverse("web:login"))
|
||||||
assert response.status_code == status.HTTP_302_FOUND
|
assert response.status_code == 302
|
||||||
assert response.url == reverse("web:index")
|
assert response.url == reverse("web:index")
|
||||||
|
|
||||||
def test_login_failed(self):
|
def test_login_failed(self):
|
||||||
@@ -58,7 +57,7 @@ class TestLogin(APITestCase):
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
assert response.status_code == status.HTTP_400_BAD_REQUEST
|
assert response.status_code == 400
|
||||||
|
|
||||||
def test_login_then_logout(self):
|
def test_login_then_logout(self):
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
@@ -69,16 +68,16 @@ class TestLogin(APITestCase):
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
assert response.status_code == status.HTTP_302_FOUND
|
assert response.status_code == 302
|
||||||
assert response.url == reverse("web:index")
|
assert response.url == reverse("web:index")
|
||||||
|
|
||||||
response = self.client.post(reverse("web:logout"))
|
response = self.client.post(reverse("web:logout"))
|
||||||
assert response.status_code == status.HTTP_302_FOUND
|
assert response.status_code == 302
|
||||||
assert response.url == reverse("web:index")
|
assert response.url == reverse("web:index")
|
||||||
|
|
||||||
def test_logout_already_logged_out(self):
|
def test_logout_already_logged_out(self):
|
||||||
response = self.client.post(reverse("web:logout"))
|
response = self.client.post(reverse("web:logout"))
|
||||||
assert response.status_code == status.HTTP_302_FOUND
|
assert response.status_code == 302
|
||||||
assert response.url == reverse("web:index")
|
assert response.url == reverse("web:index")
|
||||||
|
|
||||||
def test_login_then_get_logout(self):
|
def test_login_then_get_logout(self):
|
||||||
@@ -90,11 +89,11 @@ class TestLogin(APITestCase):
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
assert response.status_code == status.HTTP_302_FOUND
|
assert response.status_code == 302
|
||||||
assert response.url == reverse("web:index")
|
assert response.url == reverse("web:index")
|
||||||
|
|
||||||
response = self.client.get(reverse("web:logout"))
|
response = self.client.get(reverse("web:logout"))
|
||||||
assert response.status_code == status.HTTP_302_FOUND
|
assert response.status_code == 302
|
||||||
assert response.url == reverse("web:index")
|
assert response.url == reverse("web:index")
|
||||||
|
|
||||||
def test_login_then_get_my_account(self):
|
def test_login_then_get_my_account(self):
|
||||||
@@ -106,8 +105,42 @@ class TestLogin(APITestCase):
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
assert response.status_code == status.HTTP_302_FOUND
|
assert response.status_code == 302
|
||||||
assert response.url == reverse("web:index")
|
assert response.url == reverse("web:index")
|
||||||
|
|
||||||
response = self.client.get(reverse("web:my_account"))
|
response = self.client.get(reverse("web:my_account"))
|
||||||
assert response.status_code == status.HTTP_200_OK
|
assert response.status_code == 200
|
||||||
|
|
||||||
|
def test_login_redirection_to_my_account(self):
|
||||||
|
url = f'{reverse("web:login")}?next={reverse("web:my_account")}'
|
||||||
|
response = self.client.post(
|
||||||
|
url,
|
||||||
|
{
|
||||||
|
"username": self.user.username,
|
||||||
|
"password": self.password,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
assert response.status_code == 302
|
||||||
|
assert response.url == f'{reverse("web:index")}?next={reverse("web:my_account")}'
|
||||||
|
|
||||||
|
response = self.client.get(response.url)
|
||||||
|
assert response.status_code == 302
|
||||||
|
assert response.url == reverse("web:my_account")
|
||||||
|
|
||||||
|
def test_login_redirection_to_my_orders(self):
|
||||||
|
url = f'{reverse("web:login")}?next={reverse("web:orders")}'
|
||||||
|
response = self.client.post(
|
||||||
|
url,
|
||||||
|
{
|
||||||
|
"username": self.user.username,
|
||||||
|
"password": self.password,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
assert response.status_code == 302
|
||||||
|
assert response.url == f'{reverse("web:index")}?next={reverse("web:orders")}'
|
||||||
|
|
||||||
|
response = self.client.get(response.url)
|
||||||
|
assert response.status_code == 302
|
||||||
|
assert response.url == reverse("web:orders")
|
||||||
|
|||||||
+8
-6
@@ -1,5 +1,3 @@
|
|||||||
import urllib
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.contrib.auth import login as login_user
|
from django.contrib.auth import login as login_user
|
||||||
@@ -32,8 +30,12 @@ class LoginView(View, RedirectionMixin):
|
|||||||
login_form_class = LoginForm
|
login_form_class = LoginForm
|
||||||
|
|
||||||
def get_redirection(self):
|
def get_redirection(self):
|
||||||
query_param_string = urlencode(self.request.GET)
|
next_page = self.request.GET.get('next', '')
|
||||||
return f'{reverse(self.redirect_to)}?{query_param_string.join("")}'
|
|
||||||
|
if next_page:
|
||||||
|
return f'{reverse(self.redirect_to)}?next={next_page}'
|
||||||
|
|
||||||
|
return reverse(self.redirect_to)
|
||||||
|
|
||||||
def get_login_form(self, request):
|
def get_login_form(self, request):
|
||||||
return self.login_form_class(data=request.POST)
|
return self.login_form_class(data=request.POST)
|
||||||
@@ -42,7 +44,7 @@ class LoginView(View, RedirectionMixin):
|
|||||||
if request.user.is_authenticated:
|
if request.user.is_authenticated:
|
||||||
return redirect(self.get_redirection())
|
return redirect(self.get_redirection())
|
||||||
|
|
||||||
settings = WebSettings.load()
|
web_settings = WebSettings.load()
|
||||||
login_form = self.login_form_class()
|
login_form = self.login_form_class()
|
||||||
|
|
||||||
return render(
|
return render(
|
||||||
@@ -50,7 +52,7 @@ class LoginView(View, RedirectionMixin):
|
|||||||
self.template_name,
|
self.template_name,
|
||||||
{
|
{
|
||||||
"form": login_form,
|
"form": login_form,
|
||||||
"title": settings.web_title,
|
"title": web_settings.web_title,
|
||||||
"description": _("inicio de sesión"),
|
"description": _("inicio de sesión"),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -35,6 +35,12 @@ class IndexView(TemplateView):
|
|||||||
"description": settings.web_description,
|
"description": settings.web_description,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def get(self, request, *args, **kwargs):
|
||||||
|
if self.request.GET.get('next'):
|
||||||
|
return redirect(self.request.GET.get('next'))
|
||||||
|
|
||||||
|
return super().get(request, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class CategoryView(TemplateView):
|
class CategoryView(TemplateView):
|
||||||
template_name = "web/index.html"
|
template_name = "web/index.html"
|
||||||
|
|||||||
Reference in New Issue
Block a user