8

有人可以详细解释一下如何用尽可能简单的语言进行注册认证吗?我进行了身份验证(登录),django.contrib.auth但我想要获得的是完整的注册(社交/非)+登录。已经看到django-allauth, django-social-authdjango-social但如果不进行大量黑客攻击,仍然无法使其正常工作。听说过,django-registration可以django-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 提供了联系和搜索表单的简单示例。但我无法在用户注册和登录时扩展它。那么任何人都可以给出工作注册登录的kis示例吗?

更新

是一个简单的登录示例。现在django-allauth或社会授权或registration2正在考虑中......

更新2

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

4

2 回答 2

13

是一个非常好的关于 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 %}
于 2015-05-06T08:08:12.180 回答
0

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

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

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

在模板/注册中:

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

在views.py中:

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

最后,在 urls.py 中:

url(r'^myapp/loggedout/$', 'myapp.views.loggedout', name='loggedout'),
于 2015-08-16T03:33:10.680 回答