在技术开发这一行业中有许多门编程语言,而Python编程语言更是其中备受青睐的一款。这款语言简洁易用,功能强大,适用于很多的场景,比如网络开发:Python可以用于构建Web应用程序、API接口、网络爬虫等。
作为一名程序员,我近期也在学习Python这门编程语言,但是其中在部署Django程序时一直403的报错,上网查找了一下就是说我Origin checking failed。
于是我又到网上查询有关python在部署Django方面的文章,在GitHub上我看到了Python-weekly,我想着这会不会有比较详细的python介绍呢,抱着尝试的心态进去尝试。
我在空闲的时间去体验了一下,跟大家分享一下我自己的体验经历。
点开来后就是看到目录,然后我就慢慢的往下滑去寻找自己需要的关于Django部署报错的案例,发现没有关于Django部署的文章,但是有一个标题吸引我:“应该如何处理程序的错误”。我就好奇的点了进去。
发现它第二段就标识着“调试Django中CSRF失败/403禁止错误”,然后我就点了进去
1.首先它的文章给我分析了各种可能出现的类型报错,我很幸运,第一个案例就是说我现在出现的错误。
2.我往下找要怎么去解决的方法,之后我按照它的步骤一步一步的往下走。先在Django源文件中找到这行代码
REASON_BAD_ORIGIN = "Origin checking failed - %s does not match any trusted origins."
3.有了一个常量,我可以在代码库中搜索它,找到所有各种用法
# Reject the request if the Origin header doesn't match an allowed# value.if "HTTP_ORIGIN" in request.META:if not self._origin_verified(request):return self._reject(request, REASON_BAD_ORIGIN % request.META["HTTP_ORIGIN"])
4.找到后,但我仍然不知道“经过验证”的起源意味着什么,跟着它的步骤进行定义。
def _origin_verified(self, request):request_origin = request.META["HTTP_ORIGIN"]try:good_host = request.get_host()except DisallowedHost:passelse:good_origin = "%s://%s" % ("https" if request.is_secure() else "http",good_host,)if request_origin == good_origin:return Trueif request_origin in self.allowed_origins_exact:return Truetry:parsed_origin = urlparse(request_origin)except ValueError:return Falserequest_scheme = parsed_origin.schemerequest_netloc = parsed_origin.netlocreturn any(is_same_domain(request_netloc, host)for host in self.allowed_origin_subdomains.get(request_scheme, ()))
在我以为都大功告成的时候又出现了URL错误,它还有后续,说明它跟我一样也是出现了同样的错误,它给出了两种提示,但是我两种都尝试了
5.请求的来源不是有效的URL
try:parsed_origin = urlparse(request_origin)except ValueError:return False
6.请求的来源不是允许的来源子域
return any(is_same_domain(request_netloc, host)for host in self.allowed_origin_subdomains.get(request_scheme, ()))
原来是这样,我的Django终于部署上去了,困扰了我那么久了问题被解决了,心情很好会有一种成就感。
如今在我空闲的时候我还是会上python-weekly,不仅是学习python知识,同时还可以看一些视频和热门话题等等。
如果你在学习python过程中也遇到一些难题,欢迎来尝试体验一下!