相关疑难解决方法(0)

具有自定义方案的 Django URLField

Djangodjango.db.models.URLField使用一个django.core.validators.URLValidator

class URLField(CharField):
    default_validators = [validators.URLValidator()]
Run Code Online (Sandbox Code Playgroud)

因为它没有指定要接受的方案,所以 URLValidator 默认为这个集合:

schemes = ['http', 'https', 'ftp', 'ftps']
Run Code Online (Sandbox Code Playgroud)

我希望我的 URLField 接受ssh://URL,所以我尝试了这个:

class SSHURLField(models.URLField):
  '''URL field that accepts URLs that start with ssh:// only.'''
  default_validators = [URLValidator(schemes=['ssh'])]
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用有效ssh://URL保存新对象时,我被拒绝了。

如果我跳过从 URLField 继承并直接从 CharField 继承,也会发生这种情况:(编辑:实际上这在我重新创建数据库后确实有效。我不确定为什么前者不起作用。)

class SSHURLField(models.CharField):
  '''URL field that accepts URLs that start with ssh:// only.'''
  default_validators = [URLValidator(schemes=['ssh'])]

  def __init__(self, *args, **kwargs):
    kwargs['max_length'] = 64
    super(SSHURLField, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

当我在测试中直接使用 URLValidator 时,它可以工作:

def test_url(url):
  try: …
Run Code Online (Sandbox Code Playgroud)

django

5
推荐指数
1
解决办法
3508
查看次数

标签 统计

django ×1