将表单输入属性“名称”更改为“数据加密名称”

2024-01-04

这是一个棘手的标题问题,所以请在假设它是重复的之前先阅读:)。

我在用着布伦特里支付 https://www.braintreepayments.com/在 Django 网站上,以及付款方式 https://www.braintreepayments.com/docs/python/guide/getting_paid#payment_form信用卡号的 html 需要如下所示:

<input type="text" size="20" autocomplete="off" data-encrypted-name="number" />

我的目前看起来像这样:

<input type="text" size="20" autocomplete="off" name="number">

我可以以某种方式重命名吗name to data-encrypted-name?或者,我可以隐藏/删除name属性全?如果是这样,我可以轻松地为 Braintree 友好属性添加自定义属性:

class SignupForm(forms.Form):
    ...snip...

    def __init__(self, *args, **kwargs):
         super(SignupForm, self).__init__(*args, **kwargs)

         self.fields['number'].widget.attrs['data-encrypted-name'] = "number"

仅供参考我在__init__但没有运气:

         self.fields['number'].widget.attrs['name'] = None

Per 布伦特里 https://www.braintreepayments.com/docs/python/guide/getting_paid#payment_form:

重要提示:请勿将 name 属性用于任何捕获 敏感的付款信息,例如信用卡号或 CVV。 删除此属性可以防止他们访问您的服务器 纯文本,因此会缩小您的 PCI 合规范围。

另外,我正在使用 django酥脆的形式 https://github.com/maraujop/django-crispy-forms,所以我更愿意在我的forms.py并且不在模板中进行 html 调整以保持干燥。


定义一个继承自您的任何小部件类型的自定义小部件类numbers字段默认为 (TextInput,从您显示的标签判断)并覆盖它build_attrs method.

我会这样做:

class SensitiveTextInput(TextInput):
    def build_attrs(self, extra_attrs=None, **kwargs):
        attrs = super(SensitiveTextInput, self).build_attrs(extra_attrs, **kwargs)
        if 'name' in attrs:
            attrs['data-encrypted-name'] = attrs['name']
            del attrs['name']
        return attrs

如果您需要对多种小部件类型执行此操作,您可以将其抽象为混合。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将表单输入属性“名称”更改为“数据加密名称” 的相关文章

随机推荐