Django 更改表单输入属性';名称';至';数据加密名称';
这是一个棘手的标题问题,所以请在假设它是重复的之前阅读:) 我在Django网站上使用,信用卡号的html需要如下所示:Django 更改表单输入属性';名称';至';数据加密名称';,django,forms,braintree,Django,Forms,Braintree,这是一个棘手的标题问题,所以请在假设它是重复的之前阅读:) 我在Django网站上使用,信用卡号的html需要如下所示: <input type="text" size="20" autocomplete="off" data-encrypted-name="number" /> 仅供参考,我在\uuuuu init\uuuuu中尝试过这一点,但没有成功: self.fields['number'].widget.attrs['name'] = None Per
<input type="text" size="20" autocomplete="off" data-encrypted-name="number" />
仅供参考,我在\uuuuu init\uuuuu
中尝试过这一点,但没有成功:
self.fields['number'].widget.attrs['name'] = None
Per:
重要提示:不要对捕获的任何字段使用name属性
敏感的支付信息,如信用卡号或CVV。
删除此属性可防止它们在中命中您的服务器
纯文本,因此减少了您的PCI合规范围
另外,我使用的是django,所以我更喜欢在我的
forms.py中解决这个问题,而不是在模板中使用html调整来保持干燥。定义一个自定义小部件类,该类继承您的number
字段默认为的任何小部件类型(TextInput
,从您显示的标记判断)并重写其build\u attrs
方法
我会这样做:
<input type="text" size="20" autocomplete="off" name="number">
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
如果您需要为多个小部件类型执行此操作,您可以将其抽象为mixin。太好了,谢谢!我在这里添加了您所拥有的内容,但还必须添加来自django.forms.widgets import TextInput的。另外,我的表单字段现在看起来像:number=CreditCardField(required=True,label=“Card number”,widget=sensitivetemput(attrs={'autocomplete':'off','size':20}))
。CreditCardField只是我从中获取的一个自定义字段。实际上,我不能使用上面提到的CreditCardField
,也不能使用它所有奇特的验证检查。Braintree js在提交表单之前加密了CC number和CVV字段,因此验证检查失败。@Banjer那么你最终使用了常规的表单。CharField
而不是CreditCardField
?很有用。这对于整合Stripe(Stripe.com-希望这能帮助谷歌搜索)来说非常棒@teewuane抱歉,刚刚看到你的评论。我最终使用了查菲尔德。它看起来像number=forms.CharField(required=True,label=“Card number”,widget=sensitivetemput(attrs={'autocomplete':'off','size':20}))
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