Django禁用csrf和使用csrf


2020年4月5日 22:04 阅读 782 评论 0 Django

今天在博客中增加了“蓄谋已久”的开放API中心, 该中心旨在助力学生开发者以及其他个人开发者快速构建自己的服务,研究成绩查询网站的加密算法这种苦活就交于我这种闲人就好

开放API中心将陆续开放四六级、计算机等考、普通话、教师资格证、考研成绩等各类考试成绩的查询接口以及其他便民接口

好了闲话少说,进入正题

今天在开发四六级成绩查询接口时,遇到了一个小问题

众所周知,Django默认开启了csrf(跨站请求伪造)验证,如果我直接post,那么请求就会被拦截,返回403,我可以通过将setting.py里的csrf中间件注释掉来达到成功请求的目的

# 'django.middleware.csrf.CsrfViewMiddleware', 

但是!!! api和博客是一体的,如果我直接注释掉中间件,那么博客就会陷入危险之中(我多虑了,谁会来攻击我的小破站呢?哈哈哈)

经过我的不懈搜索,找到了局部禁用csrf的办法

'django.middleware.csrf.CsrfViewMiddleware',# 不注释 

from django.views.decorators.csrf import csrf_exempt 

@csrf_exempt 
def csrf_test(request): 
    return JsonResponse({'code':0}) 

这样,就可以成功post了

上面是在不注释csrf中间件的情况下局部使用csrf,同样,反过来也可以

# 'django.middleware.csrf.CsrfViewMiddleware', # 注释掉csrf中间件 

from django.views.decorators.csrf import csrf_protect 

@csrf_protect 
def csrf_test(request): 
    return JsonResponse({'code':0}) 

这样,就实现了全局关闭csrf,局部使用csrf了

最后修改于2020年4月5日 22:04
©允许规范转载

版权声明:如无特殊说明,文章均为本站原创,转载请注明出处

本文链接:https://www.yyqblog.com/article/31.html

微信
支付宝
提交数据中...