如何使用 Django 的内置登录系统

2018-02-23

Django为Web应用程序最常见的用例提供了大量内置资源。注册应用程序是一个非常好的例子,关于它的一个好处是功能可以直接使用。

使用Django注册应用程序,您可以利用以下功能:

  • 登录
  • 登出
  • 注册
  • 重设密码

在本教程中,我们将重点介绍登录和注销功能。要注册和密码重置,请查看下面的教程:

  • 如何创建密码重置视图
  • 如何创建用户注册视图

准备开始

在我们开始之前,请确保您的INSTALLED_APPS中包含了django.contrib.authMIDDLEWARE_CLASSES设置中正确配置了认证中间件。

当你使用命令 startproject 创建一个新的 Django 项目时,它们都已经配置好了。假如你没有手贱删除最初的配置,这些配置应该全部设置好了。

如果您创建一个新项目只是为了学习本教程,请使用命令行创建一个用户,以便我们可以测试登录和注销页面。

$ python manage.py createsuperuser

在本文的最后,我将以最小配置提供示例的源代码。


配置 URL 路由

首先导入django.contrib.auth.views模块,并为登录和注销视图添加URL路由:

from django.conf.urls import url
from django.contrib import admin
from django.contrib.auth import views as auth_views

urlpatterns = [
    url(r'^login/$', auth_views.login, name='login'),
    url(r'^logout/$', auth_views.logout, name='logout'),
    url(r'^admin/', admin.site.urls),
]

创建登录模板

默认情况下,django.contrib.auth.views.login 视图将尝试渲染 registration/login.html 模板。 因此,我们需要创建一个名为 registration 的文件夹,并在其中放置 login.html 模板。

下面就是一个的登录模板:

{% extends 'base.html' %}

{% block title %}Login{% endblock %}

{% block content %}
  <h2>Login</h2>
  <form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Login</button>
  </form>
{% endblock %}

django login template

这个简单的例子已经验证了用户名和密码, 并完成用户登录。


自定义 Login View

通过传递参数对 login View 进行自定义 。例如,你不想使用 registration/login.html登录模版。你可以通过 template_name 参数定义你希望使用的模版。

url(r'^login/$', auth_views.login, {'template_name': 'core/login.html'}, name='login'),

假如,你已经自定义了用户模型与用户身份验证表单。可以通过使用 authentication_form 参数传递自定义用户验证表单。

现在,我们需要在 settings.py 添加一些重要的配置, Django在成功验证后重定向用户的URL。

settings.py 文件中添加:

LOGIN_REDIRECT_URL = 'home'

该值可以是硬编码的URL或URL名称。 LOGIN_REDIRECT_URL 的默认值是 /accounts/profile/

注意, Django 会尝试将用户重定向到 GET next 参数中的 URL。


配置 logout view

访问 django.contrib.auth.views.logout 视图后,Django将渲染 registration/logged_out.html 模板。 类似于我们在 login view 中所做的方式,您可以传递不同的模板,如下所示:

url(r'^logout/$', auth_views.logout, {'template_name': 'logged_out.html'}, name='logout'),

通常,我更喜欢使用 next_page 参数,并将其重定向到项目的主页或重定向到登录页面。

url(r'^logout/$', auth_views.logout, {'next_page': '/'}, name='logout'),

在本地运行示例

在这个简短的教程中使用的代码可以在 GitHub 上找到。

  • 克隆代码仓库:
$ git clone https://github.com/sibtc/simple-django-login.git
  • 运行 migrations:
$ python manage.py migrate
  • 创建一个新用户
$ python manage.py createsuperuser
  • 运行 Django 服务
$ python manage.py runserver
  • 在你的浏览器中输入 127.0.0.1:8000/login

结论

了解更多关于 Django 注册视图的信息,可以去 Django官方网站文档 点击这里

https://simpleisbetterthancomplex.com/tutorial/2016/06/27/how-to-use-djangos-built-in-login-system.html