Аутентификация входа в Django не работает

Я пытаюсь использовать общий вид входа в систему, предоставляемый Django. Я хочу, чтобы форма регистрации и входа была на одной странице. Вот мой urls.py

from django.conf.urls import patterns, include, url
from myApp.forms import UsersForm

urlpatterns = patterns('',

    url(r'^$', 'django.contrib.auth.views.login', {'template_name': 'templates/login.html', 'authentication_form':UsersForm}),
)

а это мой login.html

<html>
    <body>
    <form method="post" action="">{% csrf_token %}
        {{ authentication_form.first_name }} {{authentication_form.last_name }} <br>
        {{ authentication_form.username }} {{ authentication_form.password }} <br>
        <input type="submit" value="Register"/>
    </form>


    {% for field, error in form.errors.items %}
        {% if forloop.counter == 1 %}
            {{ error | striptags }}
        {% endif %}
    {% endfor %}

    <form method="post" action="{% url 'django.contrib.auth.views.login' %}">{% csrf_token%}
        {{authentication_form.username.label_tag}}
        {{authentication_form.username}}
        {{authentication_form.password.label_tag}}
        {{authentication_form.password}}
    <input type="submit" value="login" />
    <input type="hidden" name="next" value="{{ next }}" />
    </form>
    </body>
</html>

Когда я запускаю сервер и перехожу к 127.0.0.1, отображаются только кнопки входа и регистрации, а фактические поля - нет (я не могу ничего вводить где-либо на странице, есть только две кнопки, одна из которых говорит 'вход в систему "и другой, который гласит" зарегистрироваться ". Там просто пустое пространство, где должны быть фактические поля. Почему поле для имени пользователя, пароля, имени и фамилии не отображается?

РЕДАКТИРОВАТЬ: когда я меняю authentication_form.username на просто form.username, он выдает ошибку шаблона, говорящую

'WSGIRequest' object has no attribute 'get'

и обратная связь с этим

Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
  140.                     response = response.render()
File "/usr/local/lib/python2.7/dist-packages/django/template/response.py" in render
  105.             self.content = self.rendered_content
File "/usr/local/lib/python2.7/dist-packages/django/template/response.py" in rendered_content
  82.         content = template.render(context)
File "/usr/local/lib/python2.7/dist-packages/django/template/base.py" in render
  140.             return self._render(context)
File "/usr/local/lib/python2.7/dist-packages/django/template/base.py" in _render
  134.         return self.nodelist.render(context)
File "/usr/local/lib/python2.7/dist-packages/django/template/base.py" in render
  830.                 bit = self.render_node(node, context)
File "/usr/local/lib/python2.7/dist-packages/django/template/debug.py" in render_node
  74.             return node.render(context)
File "/usr/local/lib/python2.7/dist-packages/django/template/debug.py" in render
  87.             output = force_text(output)
File "/usr/local/lib/python2.7/dist-packages/django/utils/encoding.py" in force_text
  99.                 s = s.__unicode__()
File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in __str__
  411.         return self.as_widget()
File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in as_widget
  458.         return widget.render(name, self.value(), attrs=attrs)
File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in value
  494.                 self.data, self.form.initial.get(self.name, self.field.initial)
File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in _data
  480.         return self.field.widget.value_from_datadict(self.form.data, self.form.files, self.html_name)
File "/usr/local/lib/python2.7/dist-packages/django/forms/widgets.py" in value_from_datadict
  209.         return data.get(name, None)

Exception Type: AttributeError at /
Exception Value: 'WSGIRequest' object has no attribute 'get'

Мой общий вид входа в систему - это просто

def login(request, template_name='registration/login.html',
      redirect_field_name=REDIRECT_FIELD_NAME,
      authentication_form=AuthenticationForm,
      current_app=None, extra_context=None):
"""
Displays the login form and handles the login action.
"""
redirect_to = request.REQUEST.get(redirect_field_name, '')

if request.method == "POST":
    form = authentication_form(data=request.POST)
    if form.is_valid():

        # Ensure the user-originating redirection url is safe.
        if not is_safe_url(url=redirect_to, host=request.get_host()):
            redirect_to = resolve_url(settings.LOGIN_REDIRECT_URL)

        # Okay, security check complete. Log the user in.
        auth_login(request, form.get_user())

        if request.session.test_cookie_worked():
            request.session.delete_test_cookie()

        return HttpResponseRedirect(redirect_to)
else:
    form = authentication_form(request)

request.session.set_test_cookie()

current_site = get_current_site(request)

context = {
    'form': form,
    redirect_field_name: redirect_to,
    'site': current_site,
    'site_name': current_site.name,
}
if extra_context is not None:
    context.update(extra_context)
return TemplateResponse(request, template_name, context,
                        current_app=current_app)

Я не вносил никаких изменений в template_name (хотя я указал template_name в моем urls.py, который можно увидеть выше) или current_app. Мой класс формы в forms.py - это

class UsersForm(forms.ModelForm):

class Meta:
model = Users
widgets = {'password':forms.PasswordInput()}

def __init__(self, *args, **kwargs):
    super( UsersForm, self ).__init__(*args, **kwargs)
    self.fields[ 'first_name' ].widget.attrs[ 'placeholder' ]="First Name"  
    self.fields[ 'last_name' ].widget.attrs[ 'placeholder' ]="Last Name"
    self.fields[ 'username' ].widget.attrs[ 'placeholder' ]="Username"
    self.fields[ 'password' ].widget.attrs[ 'placeholder' ]="Password"
    self.fields['first_name'].error_messages = {'required': 'Please enter your First Name.', 'max_length': 'Your First Name must be shorter than 50 characters.'}
    self.fields['last_name'].error_messages = {'required': 'Please enter your Last Name.', 'max_length': 'Your last Name must be shorter than 50 characters.'}
    self.fields['password'].error_messages = {'required': 'Please enter a Password.', 'max_length': 'Your Password must be shorter than 50 characters.', 'invalid': 'Your Password can only contain letters, numbers, underscores, and hyphens.'}
    self.fields['username'].error_messages = {'required': 'Please enter a Username.', 'max_length': 'Your Username must be shorter than 50 characters.', 'invalid': 'Your Username can only contain letters, numbers, underscores, and hyphens.',}

def clean_date_of_birth_month(self):
    data = self.cleaned_data.get('date_of_birth_month')
    if data == 'Month':
        raise forms.ValidationError('Please enter a correct Month for your date of birth.')

    return data

def clean_date_of_birth_day(self):
    data = self.cleaned_data.get('date_of_birth_day')
    if data == 'Day':
        raise forms.ValidationError('Please enter a correct Day for your date of birth.')

    return data

def clean_date_of_birth_year(self):
    data = self.cleaned_data.get('date_of_birth_year')
    if data == 'Year':
        raise forms.ValidationError('Please enter a correct Year for your date of birth.')

    return data

Это форма, созданная на основе существующей модели, которая является

class Users(models.Model): 
    months = (
    ('Month','Month'), ('January', 'January'), ('February','February'), ('March','March'), ('April','April'), ('May','May'), ('June','June'), 
    ('July','July'), ('August','August'), ('September','September'), ('October','October'), ('November','November'), ('December','December'),
)

    days = (
    ('Day', 'Day'), ('1','1'), ('2','2'), ('3','3'), ('4','4'), ('5','5'), ('6','6'), ('7','7'), ('8','8'), ('9','9'), ('10','10'), ('11','11'),
    ('12','12'), ('13','13'), ('14','14'), ('15','15'), ('16','16'), ('17','17'), ('18','18'), ('19','19'), ('20','20'), ('21','21'), ('22','22'),
    ('23','23'), ('24','24'), ('25','25'), ('26','26'), ('27','27'), ('28','28'), ('29','29'), ('30','30'),('31','31'),
)

    years = (
('Year','Year'), ('2013','2013'), ('2012','2012'), ('2011','2011'), ('2010','2010'), ('2009','2009'), ('2008','2008'),
)

    alpha_field = RegexValidator(regex=r'^[a-zA-Z]+$', message='Name can only contain letters.')

    user_id = models.AutoField(unique=True, primary_key=True)

    first_name = models.CharField(max_length=50, validators=[alpha_field]) 
    last_name = models.CharField(max_length=50, validators=[alpha_field])

    username = models.SlugField(max_length=50, unique=True, error_messages={'unique': u'A user with that Username already exists. Please choose a different Username.'})
    password = models.SlugField(max_length=50)

    date_of_birth_month = models.CharField(verbose_name='', max_length=9, choices=months, default='Month')
    date_of_birth_day = models.CharField(verbose_name='', max_length=3, choices=days, default='Day')
    date_of_birth_year = models.CharField(verbose_name='', max_length=4, choices=years, default='Year')

comment
вы импортировали пользовательскую форму в urls.py   -  person binboavetonik    schedule 25.10.2013
comment
@binboavetonik да в моем urls.py я сделал из myApp.forms import UsersForm   -  person user2817200    schedule 26.10.2013


Ответы (1)


Попробуйте с

{{form.username}} 

потому что общий вид называет это так:

form = authentication_form(request)
person binboavetonik    schedule 25.10.2013
comment
Хм, хорошо, я изменил его на form.username, но теперь он дает объекту 'WSGIRequest' без атрибута 'get' ошибка выделения {{form.username}}. Обратите внимание, что я не вносил никаких изменений в общее представление входа в систему вообще. я должен был? Я отредактировал свой пост, указав обратную связь с новой ошибкой и тем, как выглядит мой общий вид входа в систему. - person user2817200; 26.10.2013
comment
вы должны проверить свой класс формы. Не могли бы вы добавить код формы - person binboavetonik; 27.10.2013
comment
конечно, я только что разместил UsersForm. - person user2817200; 27.10.2013
comment
не могли бы вы попробовать удалить init вообще из usersForm - person binboavetonik; 27.10.2013
comment
вы имеете в виду удалить всю функцию def __init __ (self, * args, ** kwargs):? - person user2817200; 27.10.2013
comment
хм, он по-прежнему дает тот же объект «WSGIRequest», у которого нет атрибута «получить» ошибку .. какие-либо другие идеи, почему это происходит? - person user2817200; 28.10.2013
comment
хм, подожди, как ты думаешь, в чем проблема? Каким должен быть мой новый вопрос? Почему я получаю сообщение об ошибке? - person user2817200; 29.10.2013