You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Marshmallow中处理WebSocket URL验证?

解决Marshmallow验证ws/wss URL失败的问题

默认情况下,Marshmallow的URL字段只允许http、https、ftp、ftps这类常见协议,ws和wss不在默认允许列表内,所以会触发Not a valid URL的验证错误。这种情况不需要完全从零写自定义验证器,直接扩展现有字段的协议白名单更高效。

两种可行解决方式

方式一:扩展URL字段的允许协议列表

直接在定义Schema时,给URL字段指定包含ws、wss的协议白名单:

from marshmallow import Schema, fields

class ExplicitUriSchema(Schema):
    ws_url = fields.URL(allowed_schemes=["ws", "wss", "http", "https"])

方式二:自定义验证函数(适用于需额外校验逻辑的场景)

如果需要对URL做更多自定义校验(比如端口格式、域名规则),可以写专属验证器:

from marshmallow import Schema, fields, ValidationError
from urllib.parse import urlparse

def validate_ws_url(url):
    parsed_url = urlparse(url)
    if parsed_url.scheme not in ["ws", "wss"]:
        raise ValidationError("URL必须使用ws或wss协议")
    # 可添加额外校验,比如检查端口是否合法、域名是否符合规则等

class ExplicitUriSchema(Schema):
    ws_url = fields.Str(validate=validate_ws_url)

如果只是单纯需要支持ws/wss协议,第一种方式足够简洁,无需额外编写复杂的自定义验证逻辑。

内容的提问来源于stack exchange,提问作者Frank C.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 08:44:49