gpt4 book ai didi

python - Django自定义表单验证IP地址和域名

转载 作者:太空宇宙 更新时间:2023-11-03 15:19:49 26 4
gpt4 key购买 nike

我只是在写一个表格。但是我想对 hostname 执行自定义验证。 if type = A 然后验证它是一个域名,否则如果它是 type = PTR 则验证它是一个 IP 地址。这个逻辑是在表单还是在 View 中完成?

RECORD_CHOICES = (
('A','A'),
('Cname','CNAME'),
('PTR', 'PTR'),
)

class CacheCheck(forms.Form):
type = forms.TypedChoiceField(choices=formfields.TYPE_CHOICES, initial='FIXED')
record = forms.TypedChoiceField(choices=formfields.RECORD_CHOICES, initial='FIXED')
hostname = forms.CharField(max_length=100)

def clean(self):
cleaned_data = super(CacheCheck, self).clean()
record = cleaned_data.get("record")

if record == "PTR":
hostname = forms.GenericIPAddressField(label=("ip address"))
else record == "A":
hostname = forms.RegexField(label=("hostname"), max_length=31, regex=r'[a-zA-Z0-9-_]*\.[a-zA-Z]{2,6}'

此外,传递给 CacheCheck 类的 forms.Form 是一种混合形式还是子类化形式?

最佳答案

为您的表单编写一个clean() 方法。请参阅 cleaning and validating fields that depend on each other 上的 Django 文档获取更多信息。

您的clean 方法应该返回cleaned_data 字典。在清理后的方法中,您不能实例化新的表单字段,但可以实例化验证器。

from django.core.validators import validate_ipv46_address, RegexValidator

validate_hostname = RegexValidator(regex=r'[a-zA-Z0-9-_]*\.[a-zA-Z]{2,6}')

def clean(self):
cleaned_data = super(CacheCheck, self).clean()
record = cleaned_data.get("record")
hostname = cleaned_data.get(hostname, "")

if record == "PTR":
validate_ipv46_address(hostname)
elif record == "A":
validate_hostname(hostname)
# todo: check length of hostname as well

return cleaned_data

要回答您的其他问题,您的 CacheCheck 类是 forms.Form 的子类。

关于python - Django自定义表单验证IP地址和域名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17092623/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com