Django 允许匿名 ajax 请求访问通用视图
Posted
技术标签:
【中文标题】Django 允许匿名 ajax 请求访问通用视图【英文标题】:Django allow anonymous ajax request to access a Generic View 【发布时间】:2021-03-03 16:17:22 【问题描述】:这是我目前得到的:
from django.views.generic import View
from django.views.decorators.csrf import csrf_exempt
class ConfigurationView(View):
@csrf_exempt
def dispatch(self, *args, **kwargs):
return super(ConfigurationView, self).dispatch(*args, **kwargs)
def get(self, request):
...
但是,当我向该视图发出 ajax get 请求时,我无法访问 get 方法
function getCookie(name)
let cookieValue = null;
if (document.cookie && document.cookie !== '')
const cookies = document.cookie.split(';');
for (let i = 0; i < cookies.length; i++)
const cookie = cookies[i].trim();
if (cookie.substring(0, name.length + 1) === (name + '='))
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
return cookieValue;
$.ajax(
url: "https:// domain /configure",
headers:
'X-CSRFToken': getCookie('csrftoken')
,
crossDomain: true,
data:
email: " email ",
,
dataType: "json"
)
我认为我正确地发送了csrftoken
,我不应该真的需要csrf_exempt
,但无论哪种方式,请求都会重定向到登录页面。
任何帮助将不胜感激。
【问题讨论】:
如果重定向到登录页面,则不是csrf的问题。检查是否有任何权限类或设置应用于视图 感谢您的快速回答!目前没有任何权限类。我尝试添加一个新的权限类(IsReadOnly),但它甚至没有进入权限类 我在徘徊是否需要通过某种允许这些端点的中间件 【参考方案1】:问题实际上并不是csrftoken
,而是我必须实现一个中间件来处理那些匿名端点:
from django.utils.deprecation import MiddlewareMixin
class AuthMiddleware(MiddlewareMixin):
anonymous_whitelist = [
'/<django_app>/configure',
]
def anonymous_allowed(self, path):
if path in self.anonymous_whitelist:
return True
return False
【讨论】:
以上是关于Django 允许匿名 ajax 请求访问通用视图的主要内容,如果未能解决你的问题,请参考以下文章