wagtail cms

How does wagtail build forms

track login

url: wagtail/admin/urls/init.py

url(r'^login/$', account.login, name='wagtailadmin_login')

views: wagtail/admin/views/account.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from django.contrib.auth import views as auth_views

# building login form
def get_user_login_form():
    form_setting = 'WAGTAILADMIN_USER_LOGIN_FORM'
    if hasattr(settings, form_setting):
        return get_custom_form(form_setting)
    else:
        return forms.LoginForm

from wagtail.utils.loading import get_custom_form

# forms
from wagtail.admin import forms
class LoginForm(AuthenticationForm):
    username = forms.CharField(
        max_length=254, widget=forms.TextInput(attrs={'tabindex': '1'}))

    password = forms.CharField(
        widget=forms.PasswordInput(attrs={
            'tabindex': '2',
            'placeholder': ugettext_lazy("Enter password"),
        }))

    def __init__(self, request=None, *args, **kwargs):
        super().__init__(request=request, *args, **kwargs)
        self.fields['username'].widget.attrs['placeholder'] = (
            ugettext_lazy("Enter your %s") % self.username_field.verbose_name)

    @property
    def extra_fields(self):
        for field_name, field in self.fields.items():
            if field_name not in ['username', 'password']:
                yield field_name, field


@sensitive_post_parameters()
@never_cache
def login(request):
    ...
    from django.contrib.auth import get_user_model
        return auth_views.login(
            request,
            template_name='wagtailadmin/login.html',
            authentication_form=get_user_login_form(),
            extra_context={
                'show_password_reset': password_reset_enabled(),
                'username_field': get_user_model().USERNAME_FIELD,
            },
        )       

templates: wagtailadmin/login.html

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 <form action="{% url 'wagtailadmin_login' %}"
     method="post" autocomplete="off" novalidate>
    {% block login_form %}
    {% csrf_token %}

    {% url 'wagtailadmin_home' as home_url %}
    <input type="hidden" name="next" value="{{ next|default:home_url }}" />

    <h1>{% block branding_login %}{% trans "Sign in to Wagtail" %}{% endblock %}</h1>

    <ul class="fields">
        {% block fields %}
        <li class="full">
            <div class="field iconfield">
                {{ form.username.label_tag }}
                <div class="input icon-user">
                    {{ form.username }}
                </div>
            </div>
        </li>
        <li class="full">
            <div class="field iconfield">
                {{ form.password.label_tag }}
                <div class="input icon-password">
                    {{ form.password }}
                </div>
            </div>
            {% if show_password_reset %}
                <p class="help"><a href="{% url 'wagtailadmin_password_reset' %}">
                {% trans "Forgotten it?" %}</a></p>
            {% endif %}
        </li>

        {% block extra_fields %}
        {% for field_name, field in form.extra_fields %}gs
        <li class="full">
            {{ field.label_tag }}
            <div class="field iconfield">
                {{ field }}
            </div>
        </li>
        {% endfor %}
        {% endblock extra_fields %}

        {% comment %}
            Removed until functionality exists
            <li class="checkbox">
                <div class="field">
                    <label><input type="checkbox" />{% trans "Remember me" %}</label>
                </div>
            </li>
        {% endcomment %}
        {% endblock %}
        <li class="submit">
            {% block submit_buttons %}
            <button type="submit" class="button button-longrunning" 
            tabindex="3" data-clicked-text="{% trans 'Signing in…' %}">
            <span class="icon icon-spinner"></span>
            <em>{% trans 'Sign in' %}</em>
            </button>
            {% endblock %}
        </li>
    </ul>
{% endblock %}
</form>