一、现象:我自学了一点HTML知识,使用html+css+jQuery写了前端,用Django+MySQL写了后端,在开发环境(debug=true)中,网页运行正常,可以进行ajax的get请求和post请求。
采用前后端分离的形式将项目部署到云服务器上后,网页显示正常,get请求正常,post请求报错403,注释掉setting.py中的crfs代码依然报错。
二、分析:发现进入了Django的admin后台之后就可以进行post请求了,对比发现,进入了admin之后网页会生成名为crfstoken的cookie,之后前端就会携带这个cookie进行正常的post请求。
猜测admin后台网页中有生成crfstoken的代码,我的网页缺少这个代码所以不能post请求,请各位指点一下!
该回答引用ChatGPT
请参考下面的解决方案,如果可行还请点击 采纳,感谢!
如果您的POST请求在云服务器上报403错误,这可能是由于以下几个原因之一:
1、云服务器的CSRF验证机制可能阻止了POST请求,您可以尝试在Django配置文件中关闭CSRF验证,以查看是否是CSRF导致的问题。
2、如果您的请求没有被授权,云服务器可能会报403错误。您可以尝试在Django的视图函数中添加@csrf_exempt装饰器来禁用CSRF验证。
3、如果您的POST请求缺少必要的请求头,云服务器也可能会报403错误。您可以尝试在发送请求时附加必要的请求头。
4、如果您在服务器上没有正确配置请求URL,云服务器也可能会报403错误。请确保您的请求URL是正确的。
5、如果您的Django服务器配置有误,云服务器也可能会报403错误。请检查您的Django配置是否正确。
根据您描述的问题,Django中使用post请求报错403的错误,这是因为当用post提交数据的时候,django为了防止跨站请求伪造,django会去检查是否有一个csrf的随机字符串,如果没有就会报错。
解决方法是:
如果前台是通过form提交数据,需要在表单里面添加 {%csrf_token%} 标签
如果是通过ajax提交,通过获取返回的cookie中的字符串 放置在请求头中发送。
或者您可以看看其它资料:
https://blog.csdn.net/weixin_30239339/article/details/95561611