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

Django 4.0部署至Railway后CSRF验证失败,本地运行正常

解决Railway部署Django后CSRF验证失败的问题

针对你遇到的本地正常、部署到Railway后表单提交触发CSRF验证失败的问题,给出以下几个排查和解决方向:

1. 配置CSRF信任源

在settings.py中添加Railway部署的域名到CSRF_TRUSTED_ORIGINS,确保包含完整的HTTPS协议:

CSRF_TRUSTED_ORIGINS = ['https://你的Railway项目域名.railway.app']

如果使用自定义域名,也要把自定义域名加入到这个列表中。

2. 修正表单提交目标

你的表单action指向personal_readme:preview,但处理POST请求的逻辑在home视图中。表单提交到未处理POST的视图会导致CSRF验证流程异常,修改表单的action为当前的home视图:

<form action="{% url 'personal_readme:home' %}" method="POST" enctype="multipart/form-data">

或者直接省略action属性,表单默认会提交到当前页面对应的视图。

3. 检查ALLOWED_HOSTS配置

确保settings.py中的ALLOWED_HOSTS包含Railway的域名:

ALLOWED_HOSTS = ['你的Railway项目域名.railway.app', 'localhost', '127.0.0.1']

生产环境下DEBUG必须设置为False,否则可能引发安全问题和Cookie相关异常。

4. 表单数据处理匹配enctype

你的表单设置了enctype="multipart/form-data",但视图中只传入了request.POST。如果表单包含文件上传字段,需要同时传入request.FILES:

form = Personal_Readme_form(request.POST, request.FILES)

如果没有文件上传需求,可以去掉enctype="multipart/form-data"属性,避免不必要的处理逻辑。

5. Cookie域名配置(自定义域名场景)

如果使用自定义域名部署,需要在settings.py中配置Cookie域名:

SESSION_COOKIE_DOMAIN = '.你的自定义域名.com'
CSRF_COOKIE_DOMAIN = '.你的自定义域名.com'

这样可以确保Cookie在生产环境的域名下正常生效。

内容的提问来源于stack exchange,提问作者Shreyash mishra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:45:36