Django-Registration-Redux能为 Django 项目提供登录、注册、一步和两步身份验证、密码修改、密码重设等功能。
pip install -U django-registration-redux==1.4
打开 settings.py 文件,更新 INSTALLED_APPS 列表:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'registration' # 增加 registration 包
]
这个包所需的几个配置变量:
REGISTRATION_OPEN = True # 设为 True,允许用户注册
ACCOUNT_ACTIVATION_DAYS = 7 # 留一周的激活时间;当然,也可以设为其他值
REGISTRATION_AUTO_LOGIN = True # 设为 True,注册后自动登录
LOGIN_REDIRECT_URL = '/rango/' # 登录后呈现给用户的页面
LOGIN_URL = '/accounts/login/' # 未登录以及访问需要验证身份的页面时重定向的页面
打开 tango_with_django_project/urls.py(项目文件下的url.py,不是应用下的url.py) 文件,更新 urlpatterns,引入 registration 包的URL 映射:
url(r'^accounts/', include('registration.backends.simple.urls')),
django-registration-redux 包提供了多种操registration.backend.simple.urls 中包含下述映射:
❏ 注册 → /accounts/register/
❏ 注册完成 → /accounts/register/complete/
❏ 登录 → /accounts/login/
❏ 退出 → /accounts/logout/
❏ 修改密码 → /password/change/
❏ 重设密码 → /password/reset/
registration.backends.default.urls 还提供了两步注册过程中激活账户这一步:
❏ 激活 → activate/
❏ 成功激活 → activate/complete/
❏ 激活电子邮件:
1. • 激活邮件的正文(一个文本文件)
2.• 激活邮件的主题(一个文本文件)
虽然 django-registration-redux 包提供了上述丰富的功能,但是没有提供模板,因为每个应用都有自己的结构和外观设计。
注意,所有 URL 都使用 url 模板标签引用,且都是Django-Registration-Redux提供的。如果记不得,可以访问 http://127.0.0.1:8000/accounts/,这个页面列出了全部 URL 映射,以及各 URL 对应的名称,如下:
模板需要根据自己的需求自行定义,如下为我自己创建的模板,以登录模板为例:
login.html:
{% extends "rango/base.html" %}
{% block body_block %}
<h1>Login</h1>
<form method="post" action=".">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Log in" />
<input type="hidden" name="next" value="{{ next }}" />
</form>
<p>
Not a member?
<a href="{% url 'registration_register' %}">Register</a>
</p>
{% endblock %}
base.html:基模板,登录模板继承了该模板。此例子模板关注###########下面代码即可。理解意思。
<!DOCTYPE html>
{% load staticfiles %}
{% load rango_template_tags %}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>
Rango-
{% block title_block %}
How to Tango with Django
{% endblock %}
</title>
</head>
<body>
<div>
{% block sidebar_block %}
{% get_category_list category %}
{% endblock %}
</div>
<div>
{% block body_block %}
{# This is body_block's default content.#}
{% endblock %}
</div>
<hr>
##########################关注下面即可##############以上不需要关注
<div>
<ul>
{% if user.is_authenticated %}
<li><a href="{% url 'rango:restricted' %}">Restricted Page</a></li>
<li><a href="{% url 'auth_logout' %}?next=/rango/">Logout</a></li>
<li><a href="{% url 'auth_password_change' %}">Pass_Change</a></li>
{% else %}
<li><a href="{% url 'registration_register' %}">Regiser Here</a></li>
#此处为用户登录
#此处为用户登录
<li><a href="{% url 'auth_login' %}">Login</a></li> #此处为用户登录
{% endif %}
<li><a href="{% url 'rango:add_category' %}">Add New Category</a></li>
<li><a href="{% url 'rango:about' %}">About</a></li>
<li><a href="{% url 'rango:index' %}">Index</a></li>
</ul>
</div>
</body>
</html>
理解上述模板的url映射关系(个人理解):
首先项目文件下的url.py映入了regux的url映射,故此操作已经有了regux登录、注册等功能,此时只需要模板对此进行显示。
而要在模板中显示regux提供的功能,又要用url模板标签进行链接跳转:如上述登录中的代码片段,如下:
<a href="{% url 'registration_register' %}">Register</a>
此时点击链接即可跳转至regux提供的注册页面。