我知道有关于Django Rest框架的答案,但我找不到解决问题的方法。
我有一个应用程序,它具有身份验证和一些功能。我向它添加了一个新的应用程序,它使用Django Rest框架。我只想在此应用程序中使用库。我还想提出POST请求,我总是收到以下回复:
{
"detail": "CSRF Failed: CSRF token missing or incorrect."
}
我有以下代码:
# urls.py
from django.conf.urls import patterns, url
urlpatterns = patterns(
'api.views',
url(r'^object/$', views.Object.as_view()),
)
# views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from django.views.decorators.csrf import csrf_exempt
class Object(APIView):
@csrf_exempt
def post(self, request, format=None):
return Response({'received data': request.data})
我希望在不影响当前应用程序的情况下添加API。因此,我的问题是,我如何才能禁用此应用程序的CSRF?
修改URL。派克
如果您在URL中管理路由。py,您可以使用csrf_emption()包装所需的路由,以将它们从csrf验证中间件中排除。
import views
from django.conf.urls import patterns, url
from django.views.decorators.csrf import csrf_exempt
urlpatterns = patterns('',
url(r'^object/$', csrf_exempt(views.ObjectView.as_view())),
...
)
或者,作为一个装饰者,一些人可能会发现使用@csrf_豁免装饰者更适合他们的需要
例如,
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse
@csrf_exempt
def my_view(request):
return HttpResponse('Hello world')
应该把工作做完!
更简单的解决方案:
在views.py中,使用django大括号'CsrfExemptMixin
和authentication_classes
:
# views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from django.views.decorators.csrf import csrf_exempt
from braces.views import CsrfExemptMixin
class Object(CsrfExemptMixin, APIView):
authentication_classes = []
def post(self, request, format=None):
return Response({'received data': request.data})
为什么会发生这种错误?
发生这种情况是因为DRF使用了默认的Session身份验证
方案。DRF的会话认证使用Django的会话框架进行认证,这需要检查CSRF。
如果在视图/视图集中未定义任何身份验证\u类
,DRF将使用此身份验证类作为默认类。
'DEFAULT_AUTHENTICATION_CLASSES'= (
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication'
),
由于DRF需要对相同的视图支持基于会话和非会话的身份验证,因此它只对经过身份验证的用户强制执行CSRF检查。这意味着只有经过身份验证的请求需要CSRF令牌,匿名请求可以在没有CSRF令牌的情况下发送。
如果您使用带有Session身份验证的AJAX样式API,则需要为任何不安全的HTTP方法调用包括有效的CSRF令牌,例如PUT、PATCH、POST或DELETE
请求。
那怎么办呢?
现在要禁用csrf检查,您可以创建一个自定义身份验证类CsrfExemptSessionAuthentication
,该类扩展自默认的SessionAuthentication
类。在这个身份验证类中,我们将覆盖在实际的会话身份验证中发生的强制\u csrf()
检查。
from rest_framework.authentication import SessionAuthentication, BasicAuthentication
class CsrfExemptSessionAuthentication(SessionAuthentication):
def enforce_csrf(self, request):
return # To not perform the csrf check previously happening
在您的视图中,您可以将身份验证\u类定义为:
authentication_classes = (CsrfExemptSessionAuthentication, BasicAuthentication)
这应该可以处理csrf错误。
当我要求一个图像http://127.0.0.1:8000/api/images/1/或者传入参数进行裁剪http://127.0.0.1:8000/api/images/1/?height=320 我得到的答复是: 而在http://127.0.0.1:8000/api/images/ 答复是: 为什么缩略图不容易返回主机名,我如何将基本网址追加到响应中? 以下是我的看法。派克
任何关于如何实现这一点的指示和/或文件都将不胜感激。
问题内容: 我正在使用EF 4 STE对附件对象进行建模。该 附件 包含了名称,描述,日期,以及最重要的数据()。为了优化加载,我不想在绝对必要之前(即当用户从客户端单击时)检索Data属性。 为了遵循这种方法,我使用了此处描述的表拆分技术。我将“ 附件” 表分为“ 附件” (“名称”,“描述”,“日期”)和“ AttachmentData” (数据)。在我的EF模型中,这是一对一的关系。一切正常
我们正在启动一个新应用程序。我们想使用实体框架。我们几乎不怕意外删除sql行(尤其是意外设置相关数据等) 我想禁用每一次删除,因为我们只是用“validUntil”列标记每一行,而从不删除行。 我看到它可以通过sql中的角色来完成,但我希望所有逻辑和控制都只在代码中。 也许在实体框架核心中有新的特性来支持这一点?我知道它仍然可以用EF编写行sql,但我们并不害怕这种情况。 我还尝试删除实体关系的s
我想我会在这里问这个问题,因为我不太确定我会错在哪里。我正在尝试使用Django Rest框架类通过AJAX执行POST请求。但是,每当事件触发时,我都会收到以下错误: 这是堆栈跟踪中显示的内容: 上下文 我试图做到这一点,当用户单击“添加到列表”按钮时,它会向用户定义的列表发送一个cafeName(以及最终的其他详细信息)。 我想知道是否有人可以看看我的代码,并给我一些指导,我哪里出了问题? 代
问题内容: 我正在尝试清除tkinter中的框架,以便可以写入新内容(刷新信息),但是我无法做到这一点。我知道这些 但是frame.destroy()会完全删除框架。另外两个也不能给我我想要的结果。我需要的只是 清除框架中的每个项目,但框架本身会保留下来 。反正有做吗? 问题答案: 并且只会从视图中删除小部件,不会破坏它们。如果您不打算重复使用这些小部件,那么唯一的选择就是使用方法销毁它们。 为此