Skip to main content
 首页 » 编程设计

python之Django 自定义中间件渲染没有 csrf token

2024年11月01日25lhb25

我的自定义中间件返回呈现的响应(带有 RequestContext )。

这似乎导致了 csrf_token上下文变量设置为 NOTPROVIDED ( Djangos sentinel value for not provided ), 和 {% csrf_token %}没有输出,如the CSRF middleware is called on process_view ,我假设在这种情况下我们永远无法运行。

中间件呈现的响应并不复杂,它是一种很少使用的特殊情况,但是更改语言需要 CSRF token ,因为这是对 Djangos 内置的 POST 请求 set_language查看。

解决这个问题的最佳方法是什么?

请您参考如下方法:

process_request 中没有可用的 csrf token 的原因是 token 设置在 process_view 中csrf 中间件,在每个中间件的 process_request 之后运行,因此您需要将代码移至 process_view相反:

def process_view(self, request, view_func, view_args, view_kwargs): 
    if some_clause: 
        return render(request, 'foo.html', {'foo': 'bar'}) 
 
    return view_func(request, view_args, view_kwargs)