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

我只是在写表格。但是我想在上执行自定义验证hostname。这if type = A则验证它是其他域名明智的,如果它是type = PTR验证它是IP addres秒。这个逻辑会在表单或视图中完成吗?


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类的form.Form也是mixin或子类的形式吗?


白衣非少年
浏览 255回答 3
3回答

慕哥6287543

clean()为您的表单编写一个方法。有关更多信息,请参见有关相互依赖的字段的清理和验证的Django文档。您的clean方法应返回cleaned_data字典。在清洗的方法内部,您无法实例化新的表单字段,但可以验证器。from django.core.validators import validate_ipv46_address, RegexValidatorvalidate_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。

慕少森

这个逻辑会在表单或视图中完成吗?两个地方。在客户端使用javascript进行验证,以免造成愚蠢的错误,导致服务器资源负担沉重。然后在服务器端进行验证,以避免在数据库中包含错误的数据。传递给CacheCheck类的形式是混入还是子类化的形式?这是子类化的一种形式。CacheCheck继承Form。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python