有人可以尽可能简单地解释如何进行注册和身份验证吗?我使用django.contrib.auth
进行了身份验证(登录),但我想要的是一个完整的注册(社交/非)+登录。已经看过django-allauth
,django-social-auth
,django-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给出了{i>简单 Contact and search forms的例子。但我无法扩展用户注册和登录。 那么,任何人都可以举例说明工作 注册和登录吗?
django-allauth
或社会认可或registration2
......
django-allauth
似乎是更轻松验证的最佳解决方案。在设置中添加正确的应用程序,注册fb / google / etc应用程序并通过管理员注册并使用模板继承来更改默认页面设计。
答案 0 :(得分:13)
THIS是一个关于登录&的非常好的教程。它很好地解释了如何通过自己的广告覆盖现有的django登录页面来执行登录。
此处注册和登录概述。有关详细信息,请转到链接。
注册:
观看次数和网址
转到较低的站点文件夹(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')
打开站点文件夹中的urls.py文件(与...相同的文件夹) settings.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 %}
登录:
视图和网址打开下方站点文件夹(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})
打开站点文件夹中的urls.py文件(与settings.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,这很好 您在该网址上有个人资料页面。如果不是,你需要改变你的 登录重定向网址的设置默认为持有您的 loggedin.html page。<强>模板强>
我们假设您的网站已经有一个模板目录和一个 带有导航栏的base.html文件。打开base.html文件并进入 nav元素添加导航菜单链接到登录页面
<a href="/accounts/login">login</a>
同时添加注销链接<a href="/accounts/logout">logout</a>
创建一个名为的目录 在templates文件夹中注册。如果你通过这样做 命令行,输入mkdir registration创建一个名为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 %}
如果要显示用户名,可以进行调整 视图部分讨论的视图。然后更改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 %}
答案 1 :(得分:0)
Trix的方法对我有用,但是注销链接重定向到管理员注销,而不是login_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'),