Django:如何在我的登录页面上实现“记住我"键 [英] Django : How can I implement a remember me key on my login page

查看:76
本文介绍了Django:如何在我的登录页面上实现“记住我"键的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

实际上,我不仅仅是想编写代码,而是想了解我需要学习的所有主题,以便在登录页面上创建一个记住我的键.它是一个内置的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆