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

Django视图中读取HTML表单name属性判断请求来源页面的方法

问题本质说明

浏览器提交表单时,不会自动将<form>标签的name属性作为请求参数发送,所以你直接从request.POST里无法获取到表单的name值,可通过以下两种方案实现来源判断需求:

方案1:添加隐藏输入字段(最稳定,推荐使用)

通过在表单中插入隐藏的输入字段,主动传递来源标识,可靠性最高。

第一步:修改HTML模板

在每个需要提交到practice视图的表单内部、原有内容的任意位置(推荐放在CSRF token行之后)添加隐藏字段:

<form name = "index" action = 'practice' method = "post">
    {% csrf_token %}
    <!-- 新增隐藏字段,value值改为当前页面的标识 -->
    <input type="hidden" name="form_source" value="index">
    <!-- 原有表单内容保持不变 -->
    <center>
        <table>
            <tr><td>Support portal username</td><td>:</td><td><input type = 'text' name = USERNAME size="50"></td></tr>
            <!-- 剩余表单内容省略 -->
        </table>
    </center>
</form>

如果是home页面的表单,把隐藏字段的value改为home即可。

第二步:修改views.py视图代码

直接读取POST请求中的隐藏字段值做判断:

from django.http import HttpResponse

def practice(request):
    if request.method == "POST":
        form_source = request.POST.get("form_source", "unknown")
        if form_source == "index":
            return HttpResponse("请求来自index页面")
        elif form_source == "home":
            return HttpResponse("请求来自home页面")
        else:
            return HttpResponse("请求来自未知页面")
    # 非POST请求的逻辑可自行补充
    return HttpResponse("请求方法不支持")

方案2:读取HTTP_REFERER请求头(兼容性差,不推荐)

如果不想修改前端代码,可以尝试读取请求头中的来源地址,但该值可能被浏览器、代理服务禁用或篡改,可靠性低:

def practice(request):
    referer_url = request.META.get("HTTP_REFERER", "")
    if "index" in referer_url:
        return HttpResponse("请求来自index页面")
    elif "home" in referer_url:
        return HttpResponse("请求来自home页面")
    else:
        return HttpResponse("请求来自未知页面")

内容的提问来源于stack exchange,提问作者Harikrishna Gannu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:18:02