【问题标题】:How do I validate if a django URLfield is from a specific domain or hostname?如何验证 django URLfield 是否来自特定域或主机名?
【发布时间】:2020-12-29 00:36:52
【问题描述】:

您好,我想看看 models.URLfield 是来自 youtube 还是 soundcloud。

url = models.URLField("URL", max_length=255, unique = True)

我该怎么做?

【问题讨论】:

    标签: django validation model


    【解决方案1】:

    创建一个验证器方法,它解析 url 并检查主机名,并将其添加到您的字段中。

    from urllib.parse import urlparse
    from django.db import models
    from django.core.exceptions import ValidationError
    
    
    def validate_url(value):
        if not value:
            return  # Required error is done the field
        obj = urlparse(value)
        if not obj.hostname in ('youtube.com', 'soundcloud.com'):
            raise ValidationError('Only urls from YouTube or SoundCloud allowed')
    
    
    class ModelA(models.Model):
        url = models.URLField(
            verbose_name="URL", max_length=255, unique=True, validators=[validate_url]
        )
    

    编辑示例;验证器不应返回值。这不像是表单上的干净方法。

    查看更多信息:

    【讨论】:

    • 查看 urllib 文档。它还具有 netloc 等值,其中包含 www 和方案。因此,您可以使用 and obj.scheme == 'https' 扩展 if 语句(例如)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 2014-04-16
    • 2021-09-14
    • 1970-01-01
    • 2012-08-23
    相关资源
    最近更新 更多