Django 管理员登录表单
Django Admin Login Form
如何更改 django admin 使用的登录表单(要添加验证码字段)?我正在使用 cookiecutter 模板并遵循了其他 SO 答案和指南中的建议:
forms.py
class AuthAdminForm(AuthenticationForm):
captcha = ReCaptchaField(widget=ReCaptchaV3)
show_something_different = forms.TextInput()
class Meta(AuthenticationForm):
fields = ('email', 'password', 'show_something_different', 'captcha')
urls.py
from django.contrib import admin
from myapp.forms import AuthAdminForm
admin.autodiscover()
admin.site.login_form = AuthAdminForm
admin.site.login_template = 'admin/login.html'
urlpatterns = [
# Django Admin, use {% url 'admin:index' %}
path(settings.ADMIN_URL, admin.site.urls),
...]
我能够将 admin/login.html 添加到我的模板目录并扩展它。这可以将 google js 添加到 header(可以在源代码中看到)。但是验证码字段和我的虚拟额外字段没有显示。
我走在正确的轨道上,但让我吃惊的是 login.html 模板并没有呈现表单中存在的每个字段(这就是为什么我的虚拟测试字段从未出现过)。因此,我没有扩展 login.html,而是将整个内容复制到我自己的 templates/admin/login.html 文件中,然后手动添加了验证码字段:
<form action="{{ app_path }}" method="post" id="login-form">{% csrf_token %}
<div class="form-row">
{{ form.captcha }}
{{ form.username.errors }}
{{ form.username.label_tag }} {{ form.username }}
</div>
base.html 可以这样扩展:
{% block extrahead %}
<script async src="https://www.googletagmanager.com/gtag/js?id=G-xxx"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-xxx');
</script>
{% endblock %}
现在,验证码终于出现在我的管理员登录页面上了。
如何更改 django admin 使用的登录表单(要添加验证码字段)?我正在使用 cookiecutter 模板并遵循了其他 SO 答案和指南中的建议:
forms.py
class AuthAdminForm(AuthenticationForm):
captcha = ReCaptchaField(widget=ReCaptchaV3)
show_something_different = forms.TextInput()
class Meta(AuthenticationForm):
fields = ('email', 'password', 'show_something_different', 'captcha')
urls.py
from django.contrib import admin
from myapp.forms import AuthAdminForm
admin.autodiscover()
admin.site.login_form = AuthAdminForm
admin.site.login_template = 'admin/login.html'
urlpatterns = [
# Django Admin, use {% url 'admin:index' %}
path(settings.ADMIN_URL, admin.site.urls),
...]
我能够将 admin/login.html 添加到我的模板目录并扩展它。这可以将 google js 添加到 header(可以在源代码中看到)。但是验证码字段和我的虚拟额外字段没有显示。
我走在正确的轨道上,但让我吃惊的是 login.html 模板并没有呈现表单中存在的每个字段(这就是为什么我的虚拟测试字段从未出现过)。因此,我没有扩展 login.html,而是将整个内容复制到我自己的 templates/admin/login.html 文件中,然后手动添加了验证码字段:
<form action="{{ app_path }}" method="post" id="login-form">{% csrf_token %}
<div class="form-row">
{{ form.captcha }}
{{ form.username.errors }}
{{ form.username.label_tag }} {{ form.username }}
</div>
base.html 可以这样扩展:
{% block extrahead %}
<script async src="https://www.googletagmanager.com/gtag/js?id=G-xxx"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-xxx');
</script>
{% endblock %}
现在,验证码终于出现在我的管理员登录页面上了。