这是一个非常好的关于 login & Co 的教程。它很好地解释了如何通过我们自己的广告覆盖现有的 django 登录页面来执行登录。
更新:
这里是注册和登录的概述。有关更多详细信息,请访问链接。
注册:
视图和 URL
转到较低的站点文件夹(settings.py 文件所在的位置)并打开 views.py 文件。在顶部确保包含以下导入。如果没有,请添加它们:
from django.shortcuts import
render_to_response from django.http import HttpResponseRedirect from
django.contrib.auth.forms import UserCreationForm from
django.core.context_processors import csrf
在其下方添加以下功能(您可以将它们放在登录功能之后):
def
register(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/accounts/register/complete')
else:
form = UserCreationForm()
token = {}
token.update(csrf(request))
token['form'] = form
return render_to_response('registration/registration_form.html', token)
def registration_complete(request):
return render_to_response('registration/registration_complete.html')
打开站点文件夹(与 settings.py 相同的文件夹)中的 urls.py 文件。在 urlpatterns = patterns('' 下方,插入以下行。
# Registration URLs
url(r'^accounts/register/$', 'simplesite.views.register', name='register'),
url(r'^accounts/register/complete/$', 'simplesite.views.registration_complete',
name='registration_complete'),
模板 我们假设您的站点已经有一个模板目录和一个带有导航栏的 base.html 文件。打开 base.html 文件并在 nav 元素中添加导航菜单链接到登录页面
<a href="/accounts/register">register</a>
如果尚不存在,请转到模板文件夹并在其中创建一个名为注册的文件夹。创建一个名为 registration_form.html 的文件,将其保存到 templates/registration 文件夹,然后使用以下内容填充它:
{% extends "base.html" %} {% block title %}Register{%
endblock %} {% block content %}
<h2>Registration</h2>
<form action="/accounts/register/" method="post">{% csrf_token %}
{{form.as_p}} <input type="submit" value="Register" />
</form>
{% endblock %}
创建一个名为 registration_complete.html 的文件,将其保存到 templates/registration 文件夹,并使用以下内容填充它:
{% extends "base.html" %} {% block title %}You are
Registered{% endblock %} {% block content %}
<h2>Thank you for Registering</h2> <p><a
href="/accounts/login/">Please Login</a></p>
{% endblock %}
登录:
视图和 URL打开较低站点文件夹(settings.py 文件所在的位置)中的 views.py 文件。如果没有,则创建并保存它。在文件顶部插入以下导入: from django.shortcuts import render_to_response 在下面您只需要添加一个渲染登录页面的函数。其他功能(登录和注销)位于 Django Auth 文件夹中的 views.py 文件中。
def loggedin(request):
return render_to_response('registration/loggedin.html')
# 可选地,如果你想在他们登录时显示他们的用户名,然后在视图中调用他们的用户名。将登录功能更改为:
def loggedin(request):
return render_to_response('registration/loggedin.html',
{'username': request.user.username})
打开站点文件夹(与 settings.py 相同的文件夹)中的 urls.py 文件。在 urlpatterns = patterns('' 下方,插入以下行。
# Auth-related URLs:
url(r'^accounts/login/$', 'django.contrib.auth.views.login', name='login'),
url(r'^accounts/logout/$', 'django.contrib.auth.views.logout', name='logout'),
url(r'^accounts/loggedin/$', 'simplesite.views.loggedin', name='loggedin'),
simplesite 是包含您正在调用的 views.py 文件的文件夹的名称。打开 settings.py 文件并在底部插入LOGIN_REDIRECT_URL = '/accounts/loggedin/'
. Django 的默认设置是在您登录时重定向到 /accounts/profile,如果您在该 url 有个人资料页面,这很好。如果不是,您需要将登录重定向 url 的默认设置更改为保存您的 login.html 页面的设置。
模板
我们将假设您的站点已经有一个模板目录和一个带有导航栏的 base.html 文件。打开 base.html 文件并在 nav 元素中添加一个导航菜单链接到登录页面<a href="/accounts/login">login</a>
添加一个注销链接<a href="/accounts/logout">logout</a>
在模板文件夹中创建一个名为 registration 的目录。如果您通过命令行执行此操作,请键入 mkdir registration 创建一个名为 login.html 的文件,将其保存到 templates/registration 文件夹,并使用以下内容填充它:
{% extends "base.html" %}
{% block title %}Log In{% endblock %}
{% block content %}
<form method="post" action="{% url 'django.contrib.auth.views.login' %}">
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
<input type="submit" value="login" />
</form>
{% endblock %}
{{ form.as_table }}
使用 Django Forms 模块来创建表单。您可以通过{{ form }}
不使用 HTML 表格标签来创建未格式化的表单,或者将每个字段放在带有 的段落标签内{{
form.as_p }}
,或者作为无序列表{{ form.as_ul }}
。或者,您还可以布置自己的表单结构并使用表单字段标签,如下所示:
{% extends "base.html" %}
{% block title %}Log In{% endblock %}
{% block content %}
<form method="post" action="{% url 'django.contrib.auth.views.login' %}">
{% csrf_token %}
{% if form.errors %}
<p>Your Username or Password were not entered correctly. Please try again.</p>
{% endif %}
<table>
<tr>
<td>{{ form.username.label_tag }}</td>
<td>{{ form.username }}</td>
<td>{{ form.username.errors }}</td>
</tr>
<tr>
<td>{{ form.password.label_tag }}</td>
<td>{{ form.password }}</td>
<td>{{ form.password.errors }}</td>
</tr>
</table>
<input type="submit" value="login" />
</form>
{% endblock %}
创建一个名为 loggedin.html 的文件,将其保存到 templates/registration 文件夹,并使用以下内容填充它:
{% extends "base.html" %}
{% block title %}Logged In{% endblock %}
{% block content %}
<h2>You are logged in</h2>
{% endblock %}
如果您想显示用户名,您可以对视图部分中讨论的视图进行调整。然后将 loggedin.html 模板更改为以下内容(根据需要更改措辞):
{% extends "base.html" %}
{% block title %}Logged In{% endblock %}
{% block content %}
<h1>Welcome {{username}}</h1>
<p>Thank you for logging in.</p>
<p><a href="/accounts/logout/">Logout</a></p>
{% endblock %}
创建一个名为logged_out.html 的文件,将其保存到模板/注册文件夹并使用以下内容填充它:
{% extends "base.html" %}
{% block title %}Logged Out{% endblock %}
{% block content %}
<h2>Logged out!</h2>
<p><a href="/accounts/login/">Log back in</a></p>
{% endblock %}