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

在Django的Func中如何放置用户输入以避免SQL注入问题

解决方案

核心逻辑:Django的Func表达式内置了参数自动转义能力,所有用户输入的动态值都不要直接拼接进template参数,而是通过官方提供的传参入口传入,框架会自动完成参数化处理,彻底避免引号报错和SQL注入风险。

推荐实现方式(最简洁)

把用户输入的symptom.name用Value包裹后,作为Func的第二个位置参数传入即可,levenshtein函数的两个参数会被自动按顺序拼接,无需自定义template:

from django.db.models import F, Func, Value

lev_dist = Func(
    F('name'),
    Value(symptom.name),
    function='levenshtein'
)

自定义template场景的安全写法

如果确实需要自定义template(比如要加额外的函数逻辑),就把动态值放到params参数中,template里用%s占位即可,params中的所有值都会被框架自动参数化:

lev_dist = Func(
    F('name'),
    function='levenshtein',
    template="%(function)s(%(expressions)s, %s)",
    params=[symptom.name]
)

内容的提问来源于stack exchange,提问作者Marat Mkhitaryan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 18:24:02