django 会话记住我

django sessions remember me

我是django新手,还没找到适合我入门级的题。而且我只是不知道如何使用会话。我想在登录时勾选一个复选框以记住我。我在settings SESSION_EXPIRE_AT_BROWSER_CLOSE = True注册后,关闭浏览器后需要输入用户名和密码。如何使用“记住我”复选框更改此参数?谢谢

 views.py
def login(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = auth.authenticate(username=username, password=password)
        if user is not None:
            auth.login(request, user)
            return redirect('/')
        else:
            messages.info(request, 'invalid credentials')
            return redirect('login')
    else:
        return render(request, 'prof/login.html')


login.html

<body>
  <div class="text-center mt-5">
    <form style="max-width: 480px; margin: auto" method="post">
      {% csrf_token %}
      <img
        src="https://logodix.com/logo/1713894.jpg"
        alt=""
        width="120"
        height="90"
        class="d-inline-block mt-4 mb-4"
      />
      <p class="hint-text mb-3">Please sign in</p>
      <label class="sr-only" for="username"></label>
      <input
        type="login"
        name="username"
        class="form-control"
        placeholder="username"
        required
        autofocus
      />
      <label for="password" class="sr-only"></label>
      <input
        type="password"
        name="password"
        class="form-control mt-2"
        placeholder="password"
      />
      <div class="checkbox">
        <label for="checkbox">
          <input type="checkbox" name="checkbox" value="remember-me" /> remember
          me
        </label>
      </div>
      <div class="d-grid gap-2 mt-4">
        <input type="Submit" class="btn btn-primary" value="sign in" />
      </div>
    </form>
    <div class="messages">
      {% for message in messages %}
      <h3>{{message}}</h3>
      {% endfor %}
    </div>

https://docs.djangoproject.com/en/3.1/topics/http/sessions/#browser-length-sessions-vs-persistent-sessions

您需要在用户登录并单击复选框时设置 request.session.set_expiry(值)。

此函数中的值使用以下数据类型和值填写:https://docs.djangoproject.com/en/3.1/topics/http/sessions/#django.contrib.sessions.backends.base.SessionBase.set_expiry

对您来说,这意味着以下内容:

def login(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = auth.authenticate(username=username, password=password)
        if user is not None:
            auth.login(request, user)
            if request.cleaned_data['remember_me'] == True:
                request.session.set_expiry(value)
#                                          ^^^^^^
#                                          insert something here
            return redirect('/')
        else:
            messages.info(request, 'invalid credentials')
            return redirect('login')
    else:
        return render(request, 'prof/login.html')
def login(request):
if request.method == 'POST':
    username = request.POST['username']
    password = request.POST['password']
    user = auth.authenticate(username=username, password=password)
    try:
        remember = request.POST['remember_me']
        if remember:
            settings.SESSION_EXPIRE_AT_BROWSER_CLOSE = False
    except:
        is_private = False
        settings.SESSION_EXPIRE_AT_BROWSER_CLOSE = True

    if user is not None:
        auth.login(request, user)
        return redirect('/')
    else:
        messages.info(request, 'invalid credentials')
        return redirect('login')
else:
    return render(request, 'prof/login.html')