Django 注册和登录 - 举例说明

Posted

技术标签:

【中文标题】Django 注册和登录 - 举例说明【英文标题】:Django register and login - explained by example 【发布时间】:2013-05-29 21:54:15 【问题描述】:

有人可以详细解释一下如何用尽可能简单的语言进行注册身份验证吗?我使用django.contrib.auth 进行了身份验证(登录),但我想要获得的是完整的注册(社交/非)+登录。已经看到了django-allauthdjango-social-authdjango-social,但如果不进行大量黑客攻击,它仍然无法正常工作。听说django-registrationdjango-profiles 可以轻松很多,但我无法处理。例如,

~/.virtualenvs/plinter/lib/python2.7/site-packages/registration/backends/default/urls.py

需要一个小技巧才能工作:

# from django.views.generic.simple import direct_to_template
from django.views.generic import RedirectView
...
                           RedirectView.as_view(url='/registration/activation_complete.html'),
                           # direct_to_template,
                           # 'template': 'registration/activation_complete.html',
...

DjangoBook 给出了Contact and search forms 的简单 示例。但我无法在用户注册和登录时扩展它。 那么任何人都可以给出 working registrationlogin 的 kis 示例吗?

更新

Here 是一个简单的登录示例。现在django-allauth 或社交身份验证或registration2 正在考虑中...

更新2

django-allauth 似乎是更容易进行身份验证的最佳解决方案。在设置中正确添加应用程序,注册 fb/google/etc 应用程序并通过管理员注册并使用模板继承来更改默认页面设计。

【问题讨论】:

你为什么要破解 django-registration?您使用的是 django 1.5+ 吗?如果是这样,请不要从 pipy 安装注册,它不会为了兼容性而更新。而是从the bitbucket repo 安装。 已将hg+https://bitbucket.org/ubernostrum/django-registration/downloads/django-registration-0.8.tar.gz 添加到requirements.txt,现在将尝试。 不,这与 pipy 中的版本相同。获取主干而不是标签:hg+https://bitbucket.org/ubernostrum/django-registration $ pip freeze | grep django-registration django-registration==0.8 - 需要 simple 模块的相同版本。这很奇怪,因为其他人也将这个应用程序与 django-1.5 一起使用...... 您需要的版本是(0, 9, 0, 'beta', 1)。如果你不知道你的安装与 1.5 不兼容 【参考方案1】:

Trix 的方法对我有用,但注销链接重定向到管理员注销,而不是 logged_out.html。

为了修复重定向,我在 href 中添加了下一个选项:

<a href="% url 'logout' %?next=% url 'loggedout' %">Logout</a>

在模板/注册中:

logged_out.html重命名为loggedout.html;下划线导致它仍然路由到管理员注销页面。

在views.py中:

def loggedout(request):
    return render_to_response('registration/loggedout.html')

最后,在 urls.py 中:

url(r'^myapp/loggedout/$', 'myapp.views.loggedout', name='loggedout'),

【讨论】:

【参考方案2】:

THIS 是一个非常好的关于 login & Co 的教程。它很好地解释了如何通过我们自己执行登录并覆盖现有的 django 登录页面。

更新:

这里是注册和登录的概述。有关详细信息,请访问链接。

注册:

观看次数和网址

转到较低的站点文件夹(settings.py 文件所在的位置)并打开 view.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')

打开站点文件夹中的 urls.py 文件(与 设置.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。创建一个名为 registration_form.html,将其保存到模板/注册文件夹, 然后用以下内容填充它:

% 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 的文件,将其保存到 模板/注册文件夹,并用以下内容填充它:

% 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 打开较低站点文件夹中的 views.py 文件(settings.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 的默认设置设置为持有您的 login.html 页面。

模板

我们假设您的网站已经有一个模板目录和一个 base.html 文件与导航栏。打开 base.html 文件并在 nav 元素添加一个导航菜单链接到登录页面&lt;a href="/accounts/login"&gt;login&lt;/a&gt; 也添加一个注销链接&lt;a href="/accounts/logout"&gt;logout&lt;/a&gt; 创建一个名为 在模板文件夹中注册。如果您通过 命令行,输入 mkdir 注册 创建一个名为 login.html 的文件, 将其保存到模板/注册文件夹,并用 以下:

% 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 的文件,将其保存到 模板/注册文件夹,并用以下内容填充它:

% extends "base.html" %
% block title %Logged In% endblock %
% block content %

  <h2>You are logged in</h2>

% endblock %

如果你想显示用户名,你可以调整为 视图部分中讨论的视图。然后更改 login.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 %

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。 看教程,报告代码可不是一件简单的事情!我试着放一些基本的代码...... @skyline75489:我希望现在的答案是可以接受的,所以请您删除您的反对票吗? 其实我没有投反对票。我在复习时刚刚通过了这个答案。 好的,我希望他们是正确的并修改他们的反对意见,因为该链接非常有用,它解决了我学习身份验证的日子。

以上是关于Django 注册和登录 - 举例说明的主要内容,如果未能解决你的问题,请参考以下文章

举例说明消息队列应用场景及ActiveMQRocketMQKafka等的对比

125期举例说明消息队列应用场景及ActiveMQRocketMQKafka等的对比

jmeter接口测试(登录注册)

十Django学习之优化表单提交(GETPOST登录注册)

心迹 使用说明&功能展示

关于drupal 7 用户登录 注册 修改注册信息等的问题