📜  django登录视图? - Python (1)

📅  最后修改于: 2023-12-03 15:00:27.820000             🧑  作者: Mango

Django登录视图

在Django中,登录视图是处理用户认证过程中的主要组成部分之一。该视图通过验证用户提供的凭据(例如用户名和密码)来允许或拒绝用户访问特定网站的特定部分。

创建Django登录视图

要创建Django登录视图,您可以使用Django的默认身份验证视图。这个视图接受用户名和密码并验证它们是否与数据库中存储的凭据匹配。如果验证成功,则允许用户访问受保护的部分。

from django.contrib.auth.views import LoginView

class CustomLoginView(LoginView):
    template_name = 'accounts/login.html'  # 设置登录页面模板
    success_url = reverse_lazy('home')  # 设置成功登录后的跳转页面

    def form_valid(self, form):
        remember_me = form.cleaned_data['remember_me']  # 获取标记是否记住登录状态
        if not remember_me:
            self.request.session.set_expiry(0)  # 不记住登录状态时,设置session过期时间为关闭浏览器后
        return super().form_valid(form)
登录表单

Django登录表单可以使用Django默认身份验证表单django.contrib.auth.forms.AuthenticationForm,也可以使用自定义的表单。

from django import forms
from django.contrib.auth.forms import AuthenticationForm

class CustomAuthenticationForm(AuthenticationForm):
    remember_me = forms.BooleanField(required=False, initial=True, widget=forms.CheckboxInput(attrs={'class': 'form-check-input'}))

在表单中添加一个名为“remember_me”的选框,用于控制是否记住登录状态。

登录模板

创建一个登录模板,例如“accounts/login.html”,其中包含登录表单。

{% extends "base.html" %}

{% block content %}
  <h2>Login</h2>
  <form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <div class="form-check mb-3">
      <input type="checkbox" name="{{ form.remember_me.name }}" value="1" class="form-check-input" id="{{ form.remember_me.id_for_label }}"{% if form.remember_me.value %} checked{% endif %}>
      <label class="form-check-label" for="{{ form.remember_me.id_for_label }}">Remember me</label>
    </div>
    <button type="submit" class="btn btn-primary">Login</button>
  </form>
{% endblock %}

要访问已受保护的网站部分,您可以使用@login_required装饰器来装饰视图函数以确保用户已登录。

from django.contrib.auth.decorators import login_required

@login_required
def protected_view(request):
    # 您的代码
    pass

现在,当未经身份验证的用户访问受保护的视图时,系统将重定向到登录页面。成功登录后,将重定向到之前受保护页面或指定的成功登录后的URL。如果选中了“记住我”选框,则用户下次访问时会自动登录。

以上是关于Django登录视图的简单介绍,希望对您有所帮助!