django的Docker图像url验证

nzrxty8p  于 2022-11-28  发布在  Docker
关注(0)|答案(2)|浏览(197)

我想从用户那里得到docker图像的URL,但是在django中models.URLField()不能接受URL。
例如,此URL:hub.something.com/nginx:1.21,发生错误。
怎么能修好呢?

qhhrdooz

qhhrdooz1#

试试看:

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()])

我不擅长正则表达式,但我相信我做得对,当我尝试新的domain_re正则表达式时,它允许作为域:.com/nginx:1.21. url的其余部分由django自动处理
如果还会出现另一个正则表达式的情况,或者由于某种原因这个正则表达式不能像我期望的那样工作,我相信从这里你会找到一种方法;)只需检查URLValidator code并进行相应修改。
附言:抱歉来晚了,我和狗出去了

amrnrhlw

amrnrhlw2#

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'
            )
        ]
    )

正则表达式引用是here,您可以检查matchs

相关问题