如何验证 django URLfield 是不是来自特定域或主机名?
Posted
技术标签:
【中文标题】如何验证 django URLfield 是不是来自特定域或主机名?【英文标题】: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)
我该怎么做?
【问题讨论】:
【参考方案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]
)
编辑示例;验证器不应返回值。这不像是表单上的干净方法。
查看更多信息:
https://docs.python.org/3/library/urllib.parse.html https://docs.djangoproject.com/en/3.1/ref/validators/【讨论】:
查看 urllib 文档。它还具有 netloc 等值,其中包含 www 和方案。因此,您可以使用and obj.scheme == 'https'
扩展 if 语句(例如)以上是关于如何验证 django URLfield 是不是来自特定域或主机名?的主要内容,如果未能解决你的问题,请参考以下文章