LINUX.ORG.RU

История изменений

Исправление djnoob, (текущая версия) :

Скорее всего так и прийдется сделать - реализовать отдельные шаблоны для входа, регистрации, восстановления пароля. Но вдруг, ежели кто-то захочет, может воспользоваться следующими костылями:

0) Создаем экземпляр класса Form:

class LoginForm(forms.Form):
    username = forms.CharField(
        label=u'Имя пользователя', min_length=3, max_length=32,
        widget=forms.TextInput(attrs={'class': 'form-control'})
    )
    password = forms.CharField(
        label=u'Пароль', min_length=6, max_length=32,
        widget=forms.PasswordInput(attrs={'class': 'form-control'}),
    )

1) Определяем шаблон формы:

<form action="{% url "accounts:login" %}?next={{ current_url }}" method="POST">
  {% csrf_token %}
  <div class="form-group">
    {{ form.username.errors }}
    <label for="id_username">Имя пользователя:</label>
    {{ form.username }}
  </div>
  <div class="form-group">
    {{ form.password.errors }}
    <label for="id_password">Пароль:</label>
    {{ form.password }}
  </div>
  <div class="checkbox">
    <label>
      <input type="checkbox"> Запомнить
    </label>
  </div>
  <button type="submit" class="btn btn-default">Войти</button>
</form>

2) Ренедрим фому как inclusion_tag:

def login_form(request_path):
    return {"form": LoginForm(), "current_url": request_path}

register.inclusion_tag("units/forms/form_signin.djhtml")(login_form)

3) Обрабатываем форму

def auth_login(request):
    """
    :param request:
    :return:
    """
    if request.method == "POST":
        form = LoginForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user = authenticate(username=username, password=password)
            if user is not None:
                if user.is_active:
                    login(request, user)
                    return HttpResponseRedirect(request.GET.get("next"))
            else:
                return HttpResponse(u"Ошибка авторизации!")
    return HttpResponseRedirect(request.GET.get("next"))

Но, как вы понимаете, валидация работать не будет(. К сожалению, я не нашел адекватного способа базовыми средствами решить данную проблему. Буду писать отдельные шаблоны - тогда все встанет на свои места).

Исправление djnoob, :

Скорее всего так и прийдется сделать - реализовать отдельные шаблоны для входа, регистрации, восстановления пароля. Но вдруг, ежели кто-то захочет, может воспользоваться следующими костылями:

0) Создаем экземпляр класса Form:

class LoginForm(forms.Form):
    username = forms.CharField(
        label=u'Имя пользователя', min_length=3, max_length=32,
        widget=forms.TextInput(attrs={'class': 'form-control'})
    )
    password = forms.CharField(
        label=u'Пароль', min_length=6, max_length=32,
        widget=forms.PasswordInput(attrs={'class': 'form-control'}),
    )

1) Определяем шаблон формы:

<form action="{% url "accounts:login" %}?next={{ current_url }}" method="POST">
  {% csrf_token %}
  <div class="form-group">
    {{ form.username.errors }}
    <label for="id_username">Имя пользователя:</label>
    {{ form.username }}
  </div>
  <div class="form-group">
    {{ form.password.errors }}
    <label for="id_password">Пароль:</label>
    {{ form.password }}
  </div>
  {{ request }}
  <div class="checkbox">
    <label>
      <input type="checkbox"> Запомнить
    </label>
  </div>
  <button type="submit" class="btn btn-default">Войти</button>
</form>

2) Ренедрим фому как inclusion_tag:

def login_form(request_path):
    return {"form": LoginForm(), "current_url": request_path}

register.inclusion_tag("units/forms/form_signin.djhtml")(login_form)

3) Обрабатываем форму

def auth_login(request):
    """
    :param request:
    :return:
    """
    if request.method == "POST":
        form = LoginForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user = authenticate(username=username, password=password)
            if user is not None:
                if user.is_active:
                    login(request, user)
                    return HttpResponseRedirect(request.GET.get("next"))
            else:
                return HttpResponse(u"Ошибка авторизации!")
    return HttpResponseRedirect(request.GET.get("next"))

Но, как вы понимаете, валидация работать не будет(. К сожалению, я не нашел адекватного способа базовыми средствами решить данную проблему. Буду писать отдельные шаблоны - тогда все встанет на свои места).

Исходная версия djnoob, :

Скорее всего так и прийдется сделать - реализовать отдельные шаблоны для входа, регистрации, восстановления пароля. Но вдруг, ежели кто-то захочет может воспользоваться следующими костылями:

0) Создаем экземпляр класса Form:

class LoginForm(forms.Form):
    username = forms.CharField(
        label=u'Имя пользователя', min_length=3, max_length=32,
        widget=forms.TextInput(attrs={'class': 'form-control'})
    )
    password = forms.CharField(
        label=u'Пароль', min_length=6, max_length=32,
        widget=forms.PasswordInput(attrs={'class': 'form-control'}),
    )

1) Определяем шаблон формы:

<form action="{% url "accounts:login" %}?next={{ current_url }}" method="POST">
  {% csrf_token %}
  <div class="form-group">
    {{ form.username.errors }}
    <label for="id_username">Имя пользователя:</label>
    {{ form.username }}
  </div>
  <div class="form-group">
    {{ form.password.errors }}
    <label for="id_password">Пароль:</label>
    {{ form.password }}
  </div>
  {{ request }}
  <div class="checkbox">
    <label>
      <input type="checkbox"> Запомнить
    </label>
  </div>
  <button type="submit" class="btn btn-default">Войти</button>
</form>

2) Ренедрим фому как inclusion_tag:

def login_form(request_path):
    return {"form": LoginForm(), "current_url": request_path}

register.inclusion_tag("units/forms/form_signin.djhtml")(login_form)

3) Обрабатываем форму

def auth_login(request):
    """
    :param request:
    :return:
    """
    if request.method == "POST":
        form = LoginForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user = authenticate(username=username, password=password)
            if user is not None:
                if user.is_active:
                    login(request, user)
                    return HttpResponseRedirect(request.GET.get("next"))
            else:
                return HttpResponse(u"Ошибка авторизации!")
    return HttpResponseRedirect(request.GET.get("next"))

Но, как вы понимаете, валидация работать не будет(. К сожалению, я не нашел адекватного способа базовыми средствами решить данную проблему. Буду писать отдельные шаблоны - тогда все встанет на свои места).