Django 报 "DisallowedRedirect " 的原因是因为默认情况下,Django 不允许重定向到外部网站或非安全页面。这是出于安全考虑而设置的限制,以保护应用程序和用户免受恶意重定向攻击。
解决方法如下:
-
检查重定向 URL 是否安全。重定向目标必须是 HTTPS 和域名验证的,而不是 HTTP 链接或 IP 地址。否则,Django将会拒绝重定向。
-
在重定向 URL 中,指定完整的域名,包括协议。所以,不建议使用相对路径进行重定向。如:
return redirect('/login/')
可以改为:
return redirect('https://www.example.com/login/')
-
如果必须重定向到外部网站,请使用 redirect() 的第一个参数中的跨站点请求伪造保护 (CSRF) 标记。如:
from django.urls import reverse from django.shortcuts import redirect def my_view(request): # ... return redirect('https://www.example.com', csrf_token=request.csrf_token)
-
在 settings.py 中,将 ALLOWED_HOSTS 设置为应用程序期望请求的域名列表。如:
ALLOWED_HOSTS = ['example.com', 'www.example.com']
建议不要使用 * 通配符,因为这会打开所有的安全漏洞,使应用程序容易受到恶意攻击。
通过以上处理,即可成功避免 Django DisallowedRedirect 错误。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django报”DisallowedRedirect “的原因以及解决办法 - Python技术站