Django REST Framework 验证错误:“输入有效的 URL。”

2024-01-26

在我的 Django REST Framework 项目中,我有一个模型类,用于保存 Django 应用程序将在后台任务中抓取的服务:

class Service(models.Model):
    name = models.CharField(max_length=50)
    description = models.CharField(max_length=250)
    root_url =URLField(unique=True)

早些时候,我在本地计算机上运行了这些服务和 Django 应用程序。现在,我将服务和 Django 应用程序容器化,并让它们在 Docker 上运行。

所以现在我在添加 dockerized 服务时遇到问题,因为它的根 URL:http://sensor-service:8080/。抛出的错误是:'Enter a valid URL.'.

当向我的 Django REST API 进行 POST 时,以及通过 Django REST Framework 提供的 GUI 添加服务时,都会出现此问题。

所以,基于https://stackoverflow.com/a/49262127/5433896 https://stackoverflow.com/a/49262127/5433896 and http://www.django-rest-framework.org/api-guide/serializers/#field-level-validation http://www.django-rest-framework.org/api-guide/serializers/#field-level-validation我尝试了以下方法。注意:最重要的行是第 5 行:允许主机名后面不跟域名和/或 TLD。

模型.py:

class DockerServiceDNSUrlsCompatibleURLValidator(URLValidator):
    def __init__(self, schemes=None, **kwargs):
        self.host_re = '(' + self.hostname_re + self.domain_re + self.tld_re \
                        + '|localhost|' \
                        + self.hostname_re + ')'  # <=== added: "hostname not followed by a domain and/or TLD is acceptable"
        self.regex = _lazy_re_compile(r'^(?:[a-z0-9\.\-\+]*)://'  # scheme is validated separately
                                      r'(?:\S+(?::\S*)?@)?'  # user:pass authentication
                                      r'(?:' + self.ipv4_re + '|' + self.ipv6_re + '|' + self.host_re + ')'
                                      r'(?::\d{2,5})?'  # port
                                      r'(?:[/?#][^\s]*)?'  # resource path
                                      r'\Z',
                                      re.IGNORECASE)
        super().__init__(schemes, **kwargs)


class DjangoServiceDNSUrlsCompatibleFormURLField(forms.fields.URLField):
    default_validators = [DockerServiceDNSUrlsCompatibleURLValidator()]


class DjangoServiceDNSUrlsCompatibleURLField(models.URLField):
    default_validators = [DockerServiceDNSUrlsCompatibleURLValidator()]

    def formfield(self, **kwargs):
        return super(DjangoServiceDNSUrlsCompatibleURLField, self).formfield(**{
            'form_class': DjangoServiceDNSUrlsCompatibleFormURLField,
        })


class Service(models.Model):
    name = models.CharField(max_length=50)
    description = models.CharField(max_length=250)
    root_url = DjangoServiceDNSUrlsCompatibleURLField(unique=True)

序列化器.py:

class ServiceSerializer(serializers.HyperlinkedModelSerializer):
    validators = [DockerServiceDNSUrlsCompatibleURLValidator()]

    def validate_root_url(self, value):
        DockerServiceDNSUrlsCompatibleURLValidator(value)  # will throw validation exception if value isn't OK.
        return value

然而,错误'Enter a valid URL.'仍然被抛出。有人发现我的方法有问题吗?或者有人 - 最坏的情况,但仍然可以接受 - 知道我如何可以完全关闭此字段上的 URL 验证?


如果您有自己的正则表达式,为什么不直接使用 models.CharField 而不是 URLField 呢?喜欢:

模型.py

phone_regex = RegexValidator(
    regex=r'^\+?(?:\(?[0-9]\)?\x20?){4,14}[0-9]$',
    message="Error....")

class FooModel(models.Model):
    phone = models.CharField("Phone Number", validators=[
                         phone_regex], max_length=26, blank=True, null=True)

顺便说一句,要自定义 URLValidator 接受不带“http/https”的 url,我在下面使用

模型.py

class OptionalSchemeURLValidator(URLValidator):
    def __call__(self, value):
        if '://' not in value:
            # Validate as if it were http://
            value = 'http://' + value
        super(OptionalSchemeURLValidator, self).__call__(value)

class FooModel(models.Model):
        website = models.CharField(max_length=200, validators=[OptionalSchemeURLValidator()])

这不会改变上传的值,只是使验证通过。 我尝试了我的 DRF,它有效。

参考阿拉斯代尔的回答 https://stackoverflow.com/a/49983649/7728887,谢谢阿拉斯代尔

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django REST Framework 验证错误:“输入有效的 URL。” 的相关文章

  • Mac OS X 中文件系统的 Unicode 编码在 Python 中不正确?

    在 OS X 和 Python 中处理 Unicode 文件名有点困难 我试图在代码中稍后使用文件名作为正则表达式的输入 但文件名中使用的编码似乎与 sys getfilesystemencoding 告诉我的不同 采取以下代码 usr b
  • Pandas:如果单元格包含特定文本则删除行

    pandas 中的这段代码不起作用 如果该列包含提供的任何文本 数字 我希望它删除该行 目前 我只能在单元格与我的代码中传递的确切文本匹配时才能使其工作 因为它只删除显示 Fin 的单元格不是金融或金融 df2 df df Team Fin
  • 重定向到 /admin/login/ 结果为 302

    当用户未经身份验证时 我尝试重定向到登录页面 在我的settings py我的课程有 MIDDLEWARE CLASSES path to AuthRequiredMiddleware 这是我的课程 class AuthRequiredMi
  • 如何在 Python 中加密并在 Java 中解密?

    我正在尝试在 Python 程序中加密一些数据并将其保存 然后在 Java 程序中解密该数据 在Python中 我像这样加密它 from Crypto Cipher import AES KEY 1234567890123456789012
  • Keras:如何保存模型或权重?

    如果这个问题看起来很简单 我很抱歉 但是阅读 Keras 保存和恢复帮助页面 https www tensorflow org beta tutorials keras save and restore models https www t
  • Emacs 24.x 上的 IPython 支持

    我对 IPython 与 Emacs 的集成感到困惑 从 Emacs 24 开始 Emacs 附带了自己的python el 该文件是否支持 IPython 还是仅支持 Python 另外 维基百科 http emacswiki org e
  • 在 matplotlib 中的极坐标图上移动径向刻度标签

    From matplotlib 示例 http matplotlib org examples pylab examples polar demo html import numpy as np import seaborn as sbs
  • Tensorflow 与 Keras 的兼容性

    我正在使用 Python 3 6 和 Tensorflow 2 0 并且有一些 Keras 代码 import keras from keras models import Sequential from keras layers impo
  • 使用Python计算目录的大小?

    在我重新发明这个特殊的轮子之前 有没有人有一个很好的例程来使用 Python 计算目录的大小 如果例程能够很好地以 Mb Gb 等格式格式化大小 那就太好了 这会遍历所有子目录 总结文件大小 import os def get size s
  • Matplotlib 中 x 轴标签的频率和旋转

    我在下面编写了一个简单的脚本来使用 matplotlib 生成图形 我想将 x tick 频率从每月增加到每周并轮换标签 我不知道从哪里开始 x 轴频率 我的旋转线产生错误 TypeError set xticks got an unexp
  • 如何在 pandas 中使用 read_fwf 跳过空行?

    I use pandas read fwf http pandas pydata org pandas docs stable generated pandas read fwf htmlPython pandas 0 19 2 中的函数读
  • Python:IndexError:修改代码后列表索引超出范围

    我的代码应该提供以下格式的输出 我尝试修改代码 但我破坏了它 import pandas as pd from bs4 import BeautifulSoup as bs from selenium import webdriver im
  • Django 基于类的视图上的 success_url 的反向抱怨循环导入

    当使用基于方法的视图时 重定向为reverse没有抱怨这一点 并且仍然可以找到 root url conf 但是 在基于阶级的观点中 它抱怨 ImproperlyConfigured at blog new post The include
  • 在 keras 中保存和加载权重

    我试图从我训练过的模型中保存和加载权重 我用来保存模型的代码是 TensorBoard log dir output model fit generator image a b gen batch size steps per epoch
  • 当数据库不是 Django 模型时,是否可以使用数据库中的表?

    是否可以从应用程序数据库中的表获取查询集 该表不是应用程序中的模型 如果我有一个不是名为 cartable 的模型的表 从概念上讲 我想这样做 myqueryset cartable objects all 有没有相对简单的方法来做到这一点
  • Elasticsearch 通过搜索返回拼音标记

    我用语音分析插件 https www elastic co guide en elasticsearch plugins current analysis phonetic html由于语音转换 从弹性搜索中进行一些字符串匹配 我的问题是
  • Python SSL X509:KEY_VALUES_MISMATCH

    Python HTTPS server from http server import HTTPServer SimpleHTTPRequestHandler import ssl https stackoverflow com a 408
  • 混淆矩阵不支持多标签指示符

    multilabel indicator is not supported是我在尝试运行时收到的错误消息 confusion matrix y test predictions y test is a DataFrame其形状为 Horse
  • 如何与其他用户一起使用 pyenv?

    如何与其他用户一起使用 pyenv 例如 如果我在用户 test 的环境中安装了 pyenv 则当我以 test 身份登录时可以使用 pyenv 但是 当我以其他用户 例如 root 身份登录时如何使用 pyenv 即使你这么做了 我也会s
  • Django 与谷歌图表

    我试图让谷歌图表显示在我的页面上 但我不知道如何将值从 django 视图传递到 javascript 以便我可以绘制图表 姜戈代码 array Year Sales Expenses 2004 1000 400 2005 1170 460

随机推荐

  • 嵌套数组元素的跳过和限制

    我想在文档的嵌套数组中应用跳过和限制分页 如何执行此操作 有效方法 我的文档记录如下 id name ObjectArray url value 我想检索多个文档 每个文档包含 n 条记录 我在用 in在查找查询中根据 id 检索多条记录
  • 使用 XSLT 1.0 的百分比编码

    我正在使用 XSLT 1 0 并且不应该使用 XSLT 2 0 我有以下 xml 其中的值
  • Eclipse-CDT:添加自定义构建步骤的最佳方法是什么?

    我的项目中有一个文件 需要使用外部工具进行编译 其输出是一对 c 和 h 文件 将其集成到我的 Eclipse CDT 构建中的最佳方法是什么 理想情况下 我可以使用相对路径引用外部工具 理想情况下 Eclipse 会知道我是否更改了该文件
  • 如何在 Ubuntu 上并行运行 Apache Tomcat 和 Apache2?

    我遇到了问题 我同时进行 pHp 开发和 JSF 开发 但我遇到了一个问题 你看 不久前我安装了 Apache2 以便我可以做 pHp 但一个月后我不得不安装 Apache Tomcat 这时候问题就出现了 我遵循了所有的指示tomcat
  • 让 collat​​z 程序自动完成无聊的事情

    我正在尝试使用 用 Python 自动化无聊的东西 第 3 章末尾找到的项目指南来编写 Collat z 程序 我正在使用Python3 4 0 以下是项目概要 编写一个名为collatz 它有一个名为 number 的参数 如果数字是偶数

  • 标签语义替代用法

    嗯 我知道是没有语义的 问题是当有这样的段落时 朋友你好 今天我学到了一个新技巧 但我不会告诉你 然而 好吧 我只是开玩笑 Lorem ipsum dolor sat amet consectetur 脂肪精英 朗克斯在麦格纳 Nulla
  • Raven.Client.Exceptions.Database.DatabaseDoesNotExistException:'数据库'*****'不存在

    我在用RavenTestDriver对于我的 net core 单元测试 这是我的配置RavenTestDriver在我的单元测试解决方案中 public class TestHostBuilder RavenTestDriver IAsy
  • SQL1159 DB2 .NET 数据提供程序初始化错误,原因代码 2

    我正在尝试从运行 Windows 7 64 位的开发机器中的 NET 2 0 应用程序连接到 DB2 我在 open 方法中收到此错误 无法找到解决方案 异常类型 InvalidOperationException ExceptionMes
  • 在 OpenCV 中将较小的图像叠加在较大的图像中

    我想用 Opencv 中的图像替换图像的一部分 I used cvGetPerspectiveMatrix with a warpmatrix and using cvAnd and cvOr 但无法让它发挥作用 这是当前显示图像和替换图像
  • 浏览器不请求 favicon.ico 的原因有哪些?

    我正在编写一个位于服务器根目录的简单网页 其快捷方式图标位于 favicon ico 但我的浏览器从不请求此 favicon ico 我在 html 中包含了以下内容 当我打开开发人员工具的网络选项卡时 我看到对 192 168 0 1 网
  • 使用 group_by 的简单 Rails 3.1 视图

    我正在工作的网站上有一个菜单 食物菜单 表中的每条记录还包含一个类别字段 此类别可以是汉堡 零食 饮料或他们想要对食品进行分类的任何其他内容 我正在尝试显示菜单 其中的项目按此类别字段分组 到目前为止我的尝试 food item menus
  • RESTEasy 无法识别自定义消息正文编写器

    我的MessageBodyWriter Provider Produces text csv public class CSVMessageBodyWriter implements MessageBodyWriter
  • .NET Core Web API 5.0 构建错误

    严重性代码 说明 项目文件行抑制状态 错误 NETSDK1005 资产文件 D Working On Gra Gra obj project assets json 没有 NETCoreApp Version v5 0 的目标 确保恢复已运
  • 列依赖于其他列值

    我有一列将具有三个可能的值 稍后可能会更多 我将其存储为枚举 yes immediately yes later no 如果选择yes later制作完成后 我们还需要存储date该事件应该发生 在我看来 这必须是另一篇专栏 我的问题是设计
  • 作为收件人,是否可以检测电子邮件是通过 Gmail“安排发送”还是“发送”发送的?

    只是好奇 Gmail 是否对电子邮件标头进行了标记 以指示电子邮件是已安排发送还是立即发送 当我自己测试时 我找不到任何附加标头或标头中的任何附加参数 不过 当您安排电子邮件时 Gmail 会设置Date标题到预定时间 由于您只能以分钟的精
  • 美化C++代码,为条件语句添加括号

    如何美化C 代码 为条件语句添加括号 我需要做的是改变 if myCondition setDateTime date time to if myCondition setDateTime date time 但我必须这样做数百次 我用过A
  • Angularjs 使用 django 的 url 进行路由

    我使用 AngularJS 作为前端 使用 Django 作为后端 我在后端做非常简单的事情 所以我没有考虑使用tastypie 我遇到的问题是客户端 服务器路由 我彻底困惑了 我所做的是 从django渲染entry html页面 其中有
  • 在cmd中重新排列数组元素

    我的批处理文件中有一个数组 如下所示 port 0 port 1 0 port 2 3 port 3 2 是否有任何漂亮而优雅的方法可以将值向后移动一个元素 所以它看起来像这样 port 0 0 port 1 3 port 2 2 port
  • Caffe 运行测试失败

    成功构建 caffe 后 我进行了 runtest 但在 ImageDataLayer DBTest DataTransformTest HDF5OutputLayerTest 和一些求解器中失败 构建 链接到特定路径时是否缺少步骤 这是测
  • Django REST Framework 验证错误:“输入有效的 URL。”

    在我的 Django REST Framework 项目中 我有一个模型类 用于保存 Django 应用程序将在后台任务中抓取的服务 class Service models Model name models CharField max