为啥使用 django-rest-framework 时不需要 `csrf_exempt`?

     2023-02-19     41

关键词:

【中文标题】为啥使用 django-rest-framework 时不需要 `csrf_exempt`?【英文标题】:Why is `csrf_exempt` not needed when using django-rest-framework?为什么使用 django-rest-framework 时不需要 `csrf_exempt`? 【发布时间】:2022-01-13 23:32:30 【问题描述】:

当我使用 Postman 发出 POST 请求时,我收到错误 Forbidden (CSRF cookie not set.)

class BooksView(View):
    def post(self, request):

如果我使用csrf_exempt,则不会发生错误

from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt

@method_decorator(csrf_exempt, name='dispatch')
class BooksView(View):
    def post(self, request):

但是,当我使用django-rest-framework时,根本不会出现这个错误

from rest_framework.views import APIView

# /books
class BooksView(APIView):
    def post(self, request):

django-rest-framework 和 APIView 类相对于 csrf 做了什么?

【问题讨论】:

【参考方案1】:

django-rest-framework 中的所有视图和视图集都继承自APIView,这个类用csrf_exempt in the as_view method 包裹自己。

【讨论】:

为啥不继承 UIApplication?为啥要使用委托?

】为啥不继承UIApplication?为啥要使用委托?【英文标题】:WhynotsubclassUIApplication?Whyuseadelegate?为什么不继承UIApplication?为什么要使用委托?【发布时间】:2012-05-2604:47:09【问题描述】:除了使用应用程序委托以便UIApplication单例... 查看详情

为啥或为啥不在 C++ 中使用 memset? [关闭]

】为啥或为啥不在C++中使用memset?[关闭]【英文标题】:WhyorwhynotusememsetinC++?[closed]为什么或为什么不在C++中使用memset?[关闭]【发布时间】:2014-10-0418:40:49【问题描述】:我必须维护一个程序中有很多memset。在现代C++中使用memset... 查看详情

为啥在参数周围使用 /*、*/ 以及为啥在提取数组长度时使用 >>>? [复制]

】为啥在参数周围使用/*、*/以及为啥在提取数组长度时使用>>>?[复制]【英文标题】:Whyuse/*,*/aroundargumentsandwhyuse>>>whenextractingthelengthofanarray?[duplicate]为什么在参数周围使用/*、*/以及为什么在提取数组长度时使用>... 查看详情

为啥我们使用 cellIdentifier?

】为啥我们使用cellIdentifier?【英文标题】:WhyweusethecellIdentifier?为什么我们使用cellIdentifier?【发布时间】:2011-12-0807:47:06【问题描述】:-(UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexPath:(NSIndexPath*)indexPathstaticNSString 查看详情

为啥使用 IntrospectionFragmentMatcher?

】为啥使用IntrospectionFragmentMatcher?【英文标题】:WhyuseIntrospectionFragmentMatcher?为什么使用IntrospectionFragmentMatcher?【发布时间】:2018-10-3106:44:01【问题描述】:是否有任何理由使用IntrospectionFragmentMatcher来确定从接口和联合字段返... 查看详情

为啥有人应该在 git commit 之前使用 git add?或者为啥有人应该使用 git add 呢?

】为啥有人应该在gitcommit之前使用gitadd?或者为啥有人应该使用gitadd呢?【英文标题】:Whyshouldsomeoneusegitaddbeforegitcommit?ORwhyshouldsomeoneusegitaddatall?为什么有人应该在gitcommit之前使用gitadd?或者为什么有人应该使用gitadd呢?【发布... 查看详情

为啥操作系统不能使用整个 64 位进行寻址?为啥只有 48 位?

】为啥操作系统不能使用整个64位进行寻址?为啥只有48位?【英文标题】:Whycan\'tOSuseentire64-bitsforaddressing?Whyonlythe48-bits?为什么操作系统不能使用整个64位进行寻址?为什么只有48位?【发布时间】:2011-03-1406:29:34【问题描述】... 查看详情

为啥使用@PostConstruct?

】为啥使用@PostConstruct?【英文标题】:Whyuse@PostConstruct?为什么使用@PostConstruct?【发布时间】:2011-03-2507:23:58【问题描述】:在托管bean中,@PostConstruct在常规Java对象构造函数之后调用。为什么我要使用@PostConstruct来通过bean进行... 查看详情

为啥 DefaultMessageListenerContainer 不应该使用 CachingConnectionFactory?

】为啥DefaultMessageListenerContainer不应该使用CachingConnectionFactory?【英文标题】:WhyDefaultMessageListenerContainershouldnotuseCachingConnectionFactory?为什么DefaultMessageListenerContainer不应该使用CachingConnectionFactory?【发布时间】:2014-03 查看详情

为啥对 HttpResponseCache 使用反射?

】为啥对HttpResponseCache使用反射?【英文标题】:WhyusereflectionforHttpResponseCache?为什么对HttpResponseCache使用反射?【发布时间】:2014-06-0809:49:36【问题描述】:在HttpResponseCache的documentation中有一段:使用早期版本这个类是在Android4.0... 查看详情

为啥要使用 SerializeField?

】为啥要使用SerializeField?【英文标题】:WhyshouldIuseSerializeField?为什么要使用SerializeField?【发布时间】:2018-11-0714:58:22【问题描述】:刚开始学习C#和Unity,有一点不习惯:为什么以及何时应该使用[SerializeField]?尽管使用了[Seri... 查看详情

为啥使用 GoogleAPIClient 请求位置更新?

】为啥使用GoogleAPIClient请求位置更新?【英文标题】:WhyuseGoogleAPIClienttorequestlocationupdates?为什么使用GoogleAPIClient请求位置更新?【发布时间】:2016-09-2617:42:31【问题描述】:我注意到可以(至少)以两种不同的方式请求位置更... 查看详情

为啥刷新令牌更安全?如果刷新令牌也可能被盗,为啥我们还要使用它?

】为啥刷新令牌更安全?如果刷新令牌也可能被盗,为啥我们还要使用它?【英文标题】:Whyisrefreshtokenismoresecure&whydoweuserefreshtokenifitcanalsobestolen?为什么刷新令牌更安全?如果刷新令牌也可能被盗,为什么我们还要使用它?... 查看详情

为啥不使用指针变量

】为啥不使用指针变量【英文标题】:Whydonotusepointervariable为什么不使用指针变量【发布时间】:2013-04-1708:14:53【问题描述】:我是iOS应用开发的新手。我正在关注一个教程,该教程在BIDAppDelegate.m中有以下代码sn-p-(BOOL)application:(... 查看详情

为啥不能多次使用 MPMoviePlayerController?

】为啥不能多次使用MPMoviePlayerController?【英文标题】:WhyisitnotpossibletousetheMPMoviePlayerControllermorethanonce?为什么不能多次使用MPMoviePlayerController?【发布时间】:2009-10-1017:08:17【问题描述】:在MonoTouch中,我们在MoviePlayer示例中遇... 查看详情

为啥要使用 ExpressionVisitor?

】为啥要使用ExpressionVisitor?【英文标题】:WhywouldIwanttouseanExpressionVisitor?为什么要使用ExpressionVisitor?【发布时间】:2017-05-1621:59:13【问题描述】:我从MSDN关于Howto:ModifyExpressionTrees的文章中知道ExpressionVisitor应该做什么。它应该... 查看详情

为啥允许我们更改“const”限定变量的值?为啥允许使用指针,但不允许赋值?

】为啥允许我们更改“const”限定变量的值?为啥允许使用指针,但不允许赋值?【英文标题】:Whyareweallowedtochangevaluesof"const"qualifiedvariables?Whypointersareallowedforthis,butnotassignment?为什么允许我们更改“const”限定变量的值?... 查看详情

为啥使用分配不好?

】为啥使用分配不好?【英文标题】:Whyisusingassignbad?为什么使用分配不好?【发布时间】:2013-07-0717:14:57【问题描述】:这篇文章(LazyevaluationinR–isassignaffected?)涵盖了一些共同点,但我不确定它是否能回答我的问题。当我很久... 查看详情