from django.core.validators import URLValidator
from django.utils.deconstruct import deconstructible
from django.db import models
# I suggest to move this class to validators.py outside of this app folder
# so it can be easily accessible by all models
@deconstructible
class DockerHubURLValidator(URLValidator):
domain_re = URLValidator.domain_re + '(?:[a-z0-9-.\/:]*)'
class ModelName(models.Model):
image = models.CharField(max_length=200, validators=[DockerHubURLValidator()])
from django.db import models
from django.core.validators import RegexValidator
class App(models.Model):
image = models.CharField(
max_length=200,
validators=[
RegexValidator(
regex=r'^(?:(?=[^:\/]{1,253})(?!-)[a-zA-Z0-9-]{1,63}(?<!-)(?:\.(?!-)[a-zA-Z0-9-]{1,63}(?<!-))*(?::[0-9]{1,5})?/)?((?![._-])(?:[a-z0-9._-]*)(?<![._-])(?:/(?![._-])[a-z0-9._-]*(?<![._-]))*)(?::(?![.-])[a-zA-Z0-9_.-]{1,128})?$',
message='image is not valid',
code='invalid_url'
)
]
)
2条答案
按热度按时间qhhrdooz1#
试试看:
我不擅长正则表达式,但我相信我做得对,当我尝试新的
domain_re
正则表达式时,它允许作为域:.com/nginx:1.21
. url的其余部分由django自动处理如果还会出现另一个正则表达式的情况,或者由于某种原因这个正则表达式不能像我期望的那样工作,我相信从这里你会找到一种方法;)只需检查URLValidator code并进行相应修改。
附言:抱歉来晚了,我和狗出去了
amrnrhlw2#
正则表达式引用是here,您可以检查matchs。