Django GenericIPAddress 字段未验证输入

2024-05-12

你好,我有以下 Django 模型

class AccessPointIPAddress(models.Model):
    '''Model for storing AccessPoint IP Addresses.'''
    ap = models.ForeignKey(AccessPoint, related_name='ip_addresses')
    ip_address = models.GenericIPAddressField(protocol='IPv4')
    datetime = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['datetime']
        get_latest_by = 'datetime'

我假设 django 的GenericIPAddressField进行一些字符串验证,确定字符串确实是有效的 IP 地址。我还阅读了 django 的源代码,它确实有一些与GenericIPAddressField

但是当我尝试在 django 的 shell 上运行它时:

# Assume that *ap* is a valid AccessPoint instance
# Notice ip_address IS NOT A VALID IP ADDRESS
>> AccessPointIPAddress.objects.create(ap=ap, ip_address='xxxxxx123123----')
<AccessPointIPAddress: ap xxxxxx123123---- 2015-05-18 12:39:25.491811>

我期望它会引发某种 ValueError 或验证错误,因为给定的 ip 地址xxxxxx123123----不是有效的 IP 地址。

我在这里错过了什么吗?或者 django 的这一部分坏了?目前使用Django 1.6.5


https://docs.djangoproject.com/en/1.8/ref/validators/#how-validators-are-run https://docs.djangoproject.com/en/1.8/ref/validators/#how-validators-are-run

有关验证器如何在表单中运行的更多信息,请参阅表单验证,以及验证对象以了解它们如何在模型中运行。请注意,保存模型时验证器不会自动运行,但如果您使用 ModelForm,它将在表单中包含的任何字段上运行验证器。有关模型验证如何与表单交互的信息,请参阅 ModelForm 文档。

您可以重写 save() 方法并对模型实例执行 full_clean() ,如此处文档中所述:https://docs.djangoproject.com/en/1.8/ref/validators/#how-validators-are-run https://docs.djangoproject.com/en/1.8/ref/validators/#how-validators-are-run

或者仅对 GenericIPAddressField 使用验证器:

from django.core.validators import ip_address_validators
from django.core.exceptions import ValidationError

def save(self, *args, **kwargs):
    try:
        ip_address_validators('ipv4', self.ip_address)
    except ValidationError:
        return
    super(AccessPointIPAddress, self).save(*args, **kwargs)

它将使用以下验证器:

ipv4_re = re.compile(r'^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$')
validate_ipv4_address = RegexValidator(ipv4_re, _('Enter a valid IPv4 address.'), 'invalid')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django GenericIPAddress 字段未验证输入 的相关文章

  • 如何在Python + Selenium中获取元素的值

    我在我的 Python 3 6 3 代码中得到了这个 HTML 元素 作为 Selenium网页元素当然 span class ocenaCzastkowa masterTooltip style color 000000 alt 5 sp
  • 获取字符串模板中所有标识符列表的函数(Python)

    对于标准库string template在Python中 有没有一个函数可以获取所有标识符的列表 例如 使用以下 xml 文件
  • 在多核上运行 python 线程

    我知道Python 2 7不允许在不同的内核上运行多个线程 你需要使用multiprocessing模块以实现某种程度的并发性 我正在看concurrent futuresPython 3 4 中的模块 是否使用ThreadPoolExec
  • JQuery 验证表单数组中的重复项

    我想显示重复或不唯一的值的错误 但我的表单接受输入数组 我已经在 jsfiddle 上检查了这些问题 name week 失败但是name week 工作正常 问题1 https stackoverflow com questions 24
  • lmfit模型拟合然后预测

    我正在领养lmfit进行曲线拟合并使用拟合模型进行预测 然而下面的代码并没有达到我想要的效果 能否请你帮忙 谢谢 import numpy as np from lmfit import Model def linearModel x a0
  • Asyncio:从未检索到任务异常的怪异

    假设我有一个简单的代码 import asyncio async def exc print 1 0 loop asyncio get event loop loop create task exc try loop run forever
  • cxfreeze virtualenv 中缺少 distutils 模块

    从 python3 2 项目运行 cxfreeze 二进制文件时 我收到以下运行时错误 project dist project distutils init py 13 UserWarning The virtualenv distuti
  • matplotlib:渲染到缓冲区/访问像素数据

    我想使用 matplotlib 生成的图作为 OpenGL 中的纹理 到目前为止 我遇到的 matplotlib 的 OpenGL 后端要么不成熟 要么已经停止使用 所以我想避免使用它们 我当前的方法是将图形保存到临时 png 文件中 并从
  • 右键单击 QPushButton 上的 contextMenu

    对于我的应用程序 我在 Qt Designer 中创建了一个 GUI 并将其转换为 python 2 6 代码 关于一些QPushButton 与设计器创建 我想添加右键单击上下文菜单 菜单选项取决于应用程序状态 如何实现这样的上下文菜单
  • 尝试校准keras模型

    我正在尝试通过 Sklearn 实现来校准我的 CNN 模型CalibratedClassifierCV 尝试将其包装为KerasClassifier并覆盖预测功能但没有成功 有人可以说我做错了什么吗 这是模型代码 def create m
  • Django 模板变量从 {% for %} 循环到 Javascript

    这是一个迭代记录的 Django 模板 每条记录都包含一个由 JS 函数填充的 div 为了让 JS 知道要做什么 它需要从每次 for 循环迭代中获取一个变量并使用它 我不知道具体如何实现这一目标或是否可能 我不知道 也许记录在单独的 J
  • 在python中使用编解码器utf-8打开文件错误

    我在 windows xp 和 python 2 6 4 上执行以下代码 但它显示 IOError 如何打开名称带有 utf 8 编解码器的文件 gt gt gt open unicode txt euc kr encode utf 8 T
  • Django 1.7:如何使用 html/css 文件作为模板发送电子邮件

    从 Django 1 7 开始 可以send email 使用新参数 html message 不幸的是 没有关于如何使用它的全面指南 新手友好 或者至少我找不到它 我需要使发送的电子邮件变得漂亮 因此 我试图弄清楚如何将我的消息包含到 h
  • 将 str.contains 映射到 pandas DataFrame

    python 初学者 我正在寻找创建字符串的字典映射以及关联的值 我有一个数据框 想要创建一个新列 如果字符串匹配 则会将该列标记为 x df pd DataFrame comp dell notebook dell notebook S3
  • 如何将 pandas DataFrame 转换为 TimeSeries?

    我正在寻找一种将 DataFrame 转换为 TimeSeries 而不拆分索引和值列的方法 有任何想法吗 谢谢 In 20 import pandas as pd In 21 import numpy as np In 22 dates
  • 在Python中随机交错2个数组

    假设我有两个数组 a 1 2 3 4 b 5 6 7 8 9 我想将这两个数组交错为变量 c 注意 a 和 b 不一定具有相同的长度 但我不希望它们以确定性的方式交错 简而言之 仅仅压缩这两个数组是不够的 我不想要 c 1 5 2 6 3
  • 为什么我会在 Python 字符串格式中使用除 %r 之外的其他内容?

    我偶尔会使用 Python 字符串格式 这可以像这样完成 print int i Float f String s 54 34 434 some text 但是 这也可以这样做 print int r Float r String r 54
  • 如何将Python包从旧版本安装到新版本?

    我正在使用 python 3 7 最近在 Linux 中安装了 python 3 8 是否有任何 bash 命令或脚本可以获取 3 7 的所有软件包列表并在 3 8 版本中一一安装 我想避免每个包裹都手工完成 注意 我将它们安装在我的系统中
  • HTMX 传递所选列表中的按钮值

    我正在尝试使用 Django 使用 htmx 制作一个应用程序 我创建了一个下拉列表
  • 将二进制数转换为包含每个二进制数的数组

    我试图将二进制值转换为每个 1 0 的列表 但我得到默认的二进制值而不是列表 我有一个字符串 我将每个字符转换为二进制 它给了我一个列表 其中每个字符都有一个字符串 现在我试图将每个字符串拆分为值为 0 1 的整数 但我什么也得不到 if

随机推荐