First working version
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class AuthConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'auth'
|
||||
@@ -0,0 +1,11 @@
|
||||
from django import forms
|
||||
|
||||
class LoginForm(forms.Form):
|
||||
|
||||
|
||||
username = forms.CharField(label="Username", max_length=100, required=True, strip=True,
|
||||
widget=forms.TextInput(attrs={"class": "form-control"})
|
||||
)
|
||||
password = forms.CharField(label="Password", max_length=100, required=True,
|
||||
widget=forms.PasswordInput(attrs={"class": "form-control"})
|
||||
)
|
||||
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
@@ -0,0 +1,8 @@
|
||||
from django.urls import path
|
||||
from . import views
|
||||
|
||||
app_name = "auth"
|
||||
urlpatterns = [
|
||||
path('login', views.LoginView.as_view(), name="login"),
|
||||
path('logout', views.LogoutView.as_view(), name="logout"),
|
||||
]
|
||||
@@ -0,0 +1,51 @@
|
||||
from django.shortcuts import render
|
||||
from django.urls import reverse
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.contrib.auth import authenticate, login, logout
|
||||
from django.views import generic
|
||||
|
||||
from .forms import LoginForm
|
||||
|
||||
class LoginView(generic.TemplateView):
|
||||
template_name = "auth/login.html"
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context["form"] = LoginForm()
|
||||
if "next" in self.request.GET:
|
||||
context["next"] = self.request.GET["next"]
|
||||
return context
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
if request.user.is_authenticated:
|
||||
return HttpResponseRedirect(request.GET.get("next","/"))
|
||||
context = self.get_context_data(**kwargs)
|
||||
return self.render_to_response(context)
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
if request.user.is_authenticated:
|
||||
return HttpResponseRedirect(request.POST.get("next","/"))
|
||||
form = LoginForm(request.POST)
|
||||
if not form.is_valid():
|
||||
return HttpResponseRedirect(reverse("auth:login"))
|
||||
user = authenticate(request, username=form.cleaned_data["username"], password=form.cleaned_data["password"])
|
||||
if user is not None:
|
||||
login(request, user)
|
||||
return HttpResponseRedirect(request.GET.get("next", "/"))
|
||||
else:
|
||||
return HttpResponseRedirect(reverse("auth:login"))
|
||||
|
||||
class LogoutView(generic.RedirectView):
|
||||
|
||||
def get_redirect_url(self):
|
||||
return self.request.GET.get("next", "/")
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
logout(request)
|
||||
return super().get(request, *args, **kwargs)
|
||||
|
||||
def logout_view(request):
|
||||
|
||||
logout(request)
|
||||
redirect_to = request.GET.get("redirect_to", "/")
|
||||
return HttpResponseRedirect(redirect_to)
|
||||
Reference in New Issue
Block a user