Django:如何在我的登录页面上实现“记住我"键 [英] Django : How can I implement a remember me key on my login page
问题描述
实际上,我不仅仅是想编写代码,而是想了解我需要学习的所有主题,以便在登录页面上创建一个记住我的键.它是一个内置的django登录页面,我对会话和缓存有一点了解,但不足以使我记住密钥和没有缓存的用户.如果您可以为我提供答案或资料来源,那将对您有帮助
Actually rather than just code , I want to know all the topics I have to study for making a remember me key on my login page. Its a inbuilt django login page and i have a bit knowledge of sessions and cache but not enough for making a remember me key and havent user caching yet. If you can supply me with a answer or a source , that will be helpful
推荐答案
只需在表单中添加一个新字段,如下所示:
Just add a new field in your form like this:
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,则将其子类化,如下所示:
Update
If you are using AuthenticationForm, then sub-class it like this:
class LoginForm(AuthenticationForm):
remember_me = forms.BooleanField() # and add the remember_me field
,还可以从 LoginView .还要在视图内覆盖 form_valid
方法.
And also sub-class your new view from LoginView. Also override the form_valid
method inside the View.
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)
这篇关于Django:如何在我的登录页面上实现“记住我"键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!