Я пытаюсь реализовать систему регистрации и входа в систему для моего приложения django, используя django-registration, django-registration-defaults и django-email-usernames.
Все установлено просто отлично. django-email-usernames предоставляет пользовательскую форму входа в систему, которая позволяет использовать электронную почту в качестве имени пользователя. Вот код для формы.
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth import authenticate
...
class EmailLoginForm(forms.Form):
email = forms.CharField(label=_(u"Email"), max_length=75, widget=forms.TextInput(attrs=dict(maxlength=75)))
password = forms.CharField(label=_(u"Password"), widget=forms.PasswordInput)
def clean(self):
# Try to authenticate the user
if self.cleaned_data.get('email') and self.cleaned_data.get('password'):
user = authenticate(username=self.cleaned_data['email'], password=self.cleaned_data['password'])
if user is not None:
if user.is_active:
self.user = user # So the login view can access it
else:
raise forms.ValidationError(_("This account is inactive."))
else:
raise forms.ValidationError(_("Please enter a correct username and password. Note that both fields are case-sensitive."))
return self.cleaned_data
В url.py django-регистрации есть шаблон для страницы входа. Для входа в систему используется стандартное представление django.contrib.auth.views.login.
Итак, в urls.py я получил это:
from django.conf.urls.defaults import *
from django.views.generic.simple import direct_to_template
from django.contrib.auth import views as auth_views
from registration.views import activate
from registration.views import register
from email_usernames.forms import EmailLoginForm
...
url(r'^login/$', auth_views.login, {'template_name': 'registration/login.html', 'authentication_form': EmailLoginForm}, name='auth_login'),
...
django.contrib.auth.views.login принимает имя-шаблона и форму для использования. Я передаю их, как вы можете видеть выше. Я устанавливаю шаблон и устанавливаю для параметра authentication_form значение, указанное в именах пользователей django-email-адресата.
Затем при переходе на страницу входа я получаю следующую ошибку:
TemplateSyntaxError в / account / login /
Поймал AttributeError при рендеринге: объект 'WSGIRequest' не имеет атрибута 'get'
Ошибка шаблона
В шаблоне /Users/Amir/.virtualenvs/scvd/lib/python2.6/site-packages/registration_defaults/templates/registration/login.html ошибка в строке 16
Поймал AttributeError при рендеринге: объект 'WSGIRequest' не имеет атрибута 'get'
6 {% endif %}
7
8 <form method="post" action="{% url django.contrib.auth.views.login %}">{% csrf_token %}
9 <table>
10 <tr>
11 <td>{{ form.username.label_tag }}</td>
12 <td>{{ form.username }}</td>
13 </tr>
14 <tr>
15 <td>{{ form.password.label_tag }}</td>
16 <td>{{ form.password }}</td>
17 </tr>
18 </table>
19 <p><a href="{% url auth_password_reset %}">Forgot</a> your password? <a href="{% url registration_register %}">Need an account</a>?</p>
20
21 <input type="submit" value="login" />
22 <input type="hidden" name="next" value="{{ next }}" />
23 </form>
24
25 {% endblock %}
26
Я довольно застрял. Я уверен, что правильно сделал настройку urls.py. Я не понимаю ошибку, которая происходит со строкой 16 ({{form.password}}) в шаблоне.
Пожалуйста, дайте мне знать, что еще я могу предоставить, чтобы уточнить мой вопрос. Большое спасибо за вашу помощь заранее.