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

在PythonAnywhere上如何处理Django的POST请求?

在PythonAnywhere上如何处理Django的POST请求?

嘿,我来帮你解决这个问题!你遇到的两个疑问我都一一给你拆解清楚:

一、先搞定「Forbidden (Referer checking failed - no Referer.)」错误

这个报错看起来是Referer的问题,但本质是Django默认开启的CSRF保护机制在起作用,和PythonAnywhere本身的配置关系不大。解决方法很直接:

  • 如果是用表单提交POST请求,一定要在<form>标签内部添加CSRF令牌模板标签:
    <form method="POST" action="{% url 'your-target-view' %}">
        {% csrf_token %}
        <!-- 这里放你的表单输入框、按钮等字段 -->
        <button type="submit">提交</button>
    </form>
    
    Django会自动生成一个隐藏的令牌字段,用来验证请求的合法性,没有这个的话就会触发你看到的Forbidden错误。
  • 如果是用AJAX发送POST请求,记得在请求头里带上X-CSRFToken字段,值可以从浏览器的csrftoken Cookie中获取,或者直接从页面上的隐藏令牌字段读取,比如:
    const csrftoken = document.querySelector('[name=csrfmiddlewaretoken]').value;
    fetch('/your-target-url/', {
        method: 'POST',
        headers: {
            'X-CSRFToken': csrftoken,
        },
        body: JSON.stringify(yourData)
    });
    

⚠️ 重点提醒:除非是纯测试的临时场景,绝对不要关闭Django的CSRF中间件(settings.py里的django.middleware.csrf.CsrfViewMiddleware),这会让你的站点暴露在严重的安全风险中。

二、urls.py对POST请求的处理和GET完全一样!

Django的URL路由系统只负责匹配请求的路径,不会区分请求方法(GET/POST/PUT/DELETE等)。也就是说,不管是GET还是POST请求,只要URL路径匹配上urls.py里的规则,就会转到对应的视图函数。

你需要在视图函数里自己判断请求方法,来处理不同的逻辑,比如:

from django.shortcuts import render, redirect
from .forms import YourCustomForm

def your_view_function(request):
    if request.method == 'POST':
        # 处理POST提交的数据
        form = YourCustomForm(request.POST)
        if form.is_valid():
            # 比如保存数据到数据库
            form.save()
            # 处理完后跳转到成功页面
            return redirect('success-page-url-name')
    else:
        # GET请求时,展示空表单
        form = YourCustomForm()
    return render(request, 'your-template.html', {'form': form})

一些PythonAnywhere上的小提醒

  • 确保你的Django项目在PythonAnywhere的WSGI配置和本地一致,特别是中间件列表(settings.py里的MIDDLEWARE),不要不小心删掉了CSRF中间件。
  • 如果还是有问题,去PythonAnywhere的Web页面里查看「Error log」,里面会有更详细的错误堆栈信息,能帮你快速定位问题根源。

备注:内容来源于stack exchange,提问作者Duncan Marshall

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 18:33:09