【问题标题】:Django AuthenticationForm CustomizationDjango AuthenticationForm 自定义
【发布时间】:2021-09-01 02:24:06
【问题描述】:

我对 django 比较陌生,想自定义 AuthenticationForm 但不知道该怎么做。我本质上想覆盖 init 函数,以便能够注入属性并控制表单上显示的内容。具体来说,我想为我的登录表单添加这个:

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.fields['username'].widget = forms.widgets.TextInput(attrs={
            'class': 'form-control'
        })
    self.fields['password1'].widget = forms.widgets.PasswordInput(attrs={
            'class': 'form-control'
        })

我的问题是,在创建登录视图/表单时,我让 django 为我完成所有工作,因此我不确定如何自定义它。阅读文档时,LoginView 使用默认的 AuthenticationForm。

非常感谢任何帮助!

编辑:想出来以防其他人从 Google 阅读此内容

urls.py 用于我的项目(添加了 accounts/login/ 和 2 个导入)-

from django.contrib.auth.views import LoginView

from blog.forms import MyAuthenticationForm


    path('accounts/login/', LoginView.as_view(authentication_form=MyAuthenticationForm)),
    path('accounts/', include('django.contrib.auth.urls'))

然后我创建了自己的表单,但像这样扩展了 AuthenticationForm:

class MyAuthenticationForm(AuthenticationForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['username'].widget = forms.widgets.TextInput(attrs={
                'class': 'form-control'
            })
        self.fields['password'].widget = forms.widgets.PasswordInput(attrs={
                'class': 'form-control'
            })

现在一切正常!

【问题讨论】:

    标签: python django django-widget


    【解决方案1】:

    您可以编写一个派生自AuthenticationForm 的类CustomForm 并对其进行处理。

    您还可以通过使用 widget 关键字参数来强制字段使用您想要的小部件而不是默认小部件,如下所示:

    <A field> =  forms.<A Field>(widget = <A Widget>(attrs = {'class': 'form-control' })
      
    
       
    

    【讨论】:

    • 但是如果我创建了一个自定义表单,我是否还必须添加所有用于身份验证、密码检查等的逻辑?如果可能的话,我宁愿不必亲自这样做,尽管哈哈。我只是将那些类放到已经生成的表单的输入字段中
    • @mharre 它源自身份验证表单,它处理您所说的所有内容。看到这个docs.djangoproject.com/en/3.2/topics/auth/default/…
    • 好的,谢谢!我根据一堆谷歌搜索自己做了一些实验,并且能够通过扩展你提到的基类表单来解决这个问题。
    • @mharre 不客气。那就接受我的回答吧。 :)
    猜你喜欢
    • 1970-01-01
    • 2019-05-16
    • 2013-08-27
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 2017-01-30
    • 2019-06-28
    • 2022-09-24
    相关资源
    最近更新 更多