Как настроить форму авторизации по умолчанию в Django? - PullRequest
3 голосов
/ 27 марта 2019

Как настроить форму входа по умолчанию в Django?

# demo_project/urls.py
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('', include('pages.urls')),
    path('users/', include('users.urls')), # new
    path('users/', include('django.contrib.auth.urls')), # new
    path('admin/', admin.site.urls),
]

<!-- templates/registration/login.html -->
    <h2>Login</h2>
    <form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Login</button>
    </form>

Приведенный выше код работает, но мне нужно настроить этот {{form.as_p}} Где эта форма или ее можно переопределить?Спасибо за помощь.

Ответы [ 3 ]

2 голосов
/ 27 марта 2019

Вы можете настроить визуализацию своей формы, переопределив / отредактировав templates / registration / login.html , как показано ниже.

Это, например, только вы можете изменить стили CSS и форматированиекак хотите.

<h2>Login</h2>
<form method="post">
    {{ form.non_field_errors }}
    <div class="fieldWrapper">
        {{ form.username.errors }}
        <label for="{{ form.username.id_for_label }}">Username:</label>
        {{ form.username }}
    </div>
    <div class="fieldWrapper">
        {{ form.password.errors }}
        <label for="{{ form.password.id_for_label }}">Password:</label>
        {{ form.password }}
    </div>
    <button type="submit">Login</button>
</form>

Вы также можете циклически проходить по полям формы

<h2>Login</h2>
<form method="post">
    {% for field in form %}
        <div class="fieldWrapper">
            {{ field.errors }}
            {{ field.label_tag }} {{ field }}
            {% if field.help_text %}
            <p class="help">{{ field.help_text|safe }}</p>
            {% endif %}
        </div>
    {% endfor %}
    <button type="submit">Login</button>
</form>

Вы также можете проверить дополнительные параметры рендеринга формы с здесь

2 голосов
/ 27 марта 2019

Исходя из вопроса, я предполагаю, что вы хотите изменить внешний вид html-шаблона вместо класса форм python.В этом случае все, что вам нужно сделать, - это включить поля входного типа с соответствующими именами и атрибутами ids, что ожидает форма django-auth по умолчанию.Это можно сделать, выполнив следующие действия.

  1. Визуализация шаблона в процессе его рендеринга (используя {{form.as_p}}).
  2. Проверка элементов и проверка имени пользователя,пароль и отправьте имя кнопки и идентификаторы кнопки, сгенерированные по умолчанию в форме авторизации.
  3. Воссоздайте те же теги, используя свой собственный стиль.

Это выглядит примерно так:

<form method="POST">
  {% csrf_token %}
  <input type="input" class="form-control" name="username" id="inputEmail" placeholder="Username" required >
  <input type="password" class="form-control" name="password" id="inputPass" placeholder="Password" required>
  <button type="submit" style="opacity: 1 !important;">Login</button>
  <a href="/password_reset">Reset Password</a>
</form>

После этого вы можете использовать свое воображение и разработать форму входа в систему в соответствии с вашими требованиями.

Надеюсь, это поможет.

1 голос
/ 27 марта 2019

Вы можете переопределить форму аутентификации по умолчанию

как это

from django.contrib.auth.forms import AuthenticationForm

from django import forms


class UserLoginForm(AuthenticationForm):
    def __init__(self, *args, **kwargs):
        super(UserLoginForm, self).__init__(*args, **kwargs)

    username = forms.EmailField(widget=forms.TextInput(
        attrs={'class': 'form-control', 'placeholder': '', 'id': 'hello'}))
    password = forms.CharField(widget=forms.PasswordInput(
        attrs={
            'class': 'form-control',
            'placeholder': '',
            'id': 'hi',
        }
))

в url.py вы можете передать эту пользовательскую форму аутентификации, подобную этой

from django.contrib.auth import views

from myapp.forms import UserLoginForm
urlpatterns = [

    path(
        'login/',
        views.LoginView.as_view(
            template_name="login.html",
            authentication_form=UserLoginForm
            ),
        name='login'
)
]

также вы можете переопределить шаблон входа

и настройте шаблон в соответствии с вашими требованиями

<form method="post">
    {{ form.non_field_errors }}
    <div class="form-group">

        <label for="{{ form.username.id_for_label }}">Username:</label>
        {{ form.username }}
        {{ form.username.errors }}

    </div>
    <div class="form-group">

        <label for="{{ form.password.id_for_label }}">Password:</label>
        {{ form.password }}
        {{ form.password.errors }}
    </div>
    <button type="submit">Login</button>
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...