Просто добавьте в вашу форму новое поле, например:
class LoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField(widget= forms.PasswordInput)
remember_me = forms.BoolenField()
И обновите представление
def login(request):
if request.method == "POST":
form = LoginForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
remember_me = form.cleaned_data['remember_me']
user = authenticated(username=username, password=password)
if user:
login(request, user)
if not remember_me:
request.session.set_expiry(0) # <-- Here if the remember me is False, that is why expiry is set to 0 seconds. So it will automatically close the session after the browser is closed.
# else browser session will be as long as the session cookie time "SESSION_COOKIE_AGE"
return redirect('/some/success/url')
else:
form = LoginForm()
render(request, 'name.html', {'form': form})
Обновите
Если вы используете AuthenticationForm, тогдаподкласс это так:
class LoginForm(AuthenticationForm):
remember_me = forms.BooleanField() # and add the remember_me field
А также подкласс ваш новый вид из LoginView .Также переопределите метод form_valid
в представлении.
from django.contrib.auth import login as auth_login,
class UpdatedLoginView(LoginView):
form_class = LoginForm
def form_valid(self, form):
remember_me = form.cleaned_data['remember_me'] # get remember me data from cleaned_data of form
if not remember_me:
self.request.session.set_expiry(0) # if remember me is
self.request.session.modified = True
return super(UpdatedLoginView, self).form_valid(form)