我创建了一个 django 项目并设置了 urls.py、查看模型等。除了一件事外,一切都运行良好。
urls.py 片段:
urlpatterns = patterns('',
(r'^$', main_page),
(r'^sendcall/$', sendcall),
(r'^dial_ag/$', dial_ag),
因此,我的 '/'、'/sendcall/' 工作正常,因为它们从我的模板表单获取 POST 请求,并且 csrf_token 存在,所以根本没有问题。
现在这个 /dial_ag/ url 永远不会从我的应用程序中调用。此 url 将由第三方 API 调用(我在他们的应用程序中配置了此 url,因此他们将向此 url 发送 POST 请求)。我发现在这种情况下,views.py 中的视图dial_ag必须在装饰器@csrf_exempt下使用,否则第三方将始终得到 403 禁止响应,因为我猜 django 甚至希望在请求中包含 csrf_token?
所以现在我让它工作了,但我在 stackoverflow 上阅读了关于在 @csrf_exempt 之后使用 @requires_csrf_token 来处理安全漏洞的信息——一种在内部以某种方式传递 csrf_token 并保护视图的方法:
@csrf_exempt
@requires_csrf_token
def my_protected_unprotected_view():
...
这就是我卡住的地方。我无法理解这个概念或找到一个很好的文档(是的 django 文档在这里没有帮助。)关于如何实现这个。我如何从urls.py本身将令牌传递给视图,这样我就不必只使用@csrf_exempt。第三方应用程序与项目没有任何关系,除了将 REQUEST 发送到我不应该有令牌但使用@csrf_token的 url是处理这种情况的最佳方法吗?