csrf_token之全局认证与局部认证

本文详细介绍了Django中CSRF的工作原理及其配置方法。包括如何通过中间件管理CSRF验证、不同场景下如何启用或禁用CSRF保护,以及在FBV和CBV中使用CSRF的具体实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、settings.py没有注释到csrf。当post请求的方式会报错。

接下来就解决问题!

1. django中间件        最多5个                  
- process_request     请求                 
- process_view                 
- process_response    相应                 
- process_exception   异常                 
- process_render_template 
             
2. 中间件执行流程:             
process_request>路由匹配 找到函数不执行>process_view 
>视图函数>process_response   
           
3. 中间件的作用                 
- 权限                 
- 用户登录验证     

4. django的csrf实现功能:        
csrf在process_view方法                        
- 检查视图是否被@csrf_exempt(免除csrf认证)                         
- 去请求体或cookie中获取token

1.FBV:情况一:csrf打开,个别不需要csrf认证。在方法的上方加@csrf_exempt 。这是全局使用csrf。

2.FBV:情况二:csrf注释,个别需要csrf认证。加@csrf_protect ,这是局部使用csrf。

1.CBV:情况一:csrf打开,个别不需要csrf认证。@method_decorator  全局使用csrf。

运行结果:加在单独方法上是不行的,还是会报错。  

方式一:

方式二:加载class类上,指定方法名。装饰的位置不一样。

总结:
- 本质,基于反射来实现
- 流程:路由,view,dispatch(反射)
- 取消csrf认证(装饰器要加到dispatch方法上且method_decorator装饰)
                
扩展:
- csrf 
- 基于中间件的process_view方法
- 装饰器给单独函数进行设置(认证或无需认证)

 

apipost我设置了Header为Cookie:ztsg_uuid=c61bb9d1b7a03050-b5a8-4c77-8433-324185b30b18;lang=zh;idss_cid=9e6e7e2d-53df-4a2f-82d3-b942a374cc13;ztsg_ruuid=fc5df07e8133c91e-69fc-4cf6-9efa-4d5b8c9b020c;env_token=uat;mtl-tactic-x-csrf-token=GWF884C46143705C3FF243C4DD305AE57840829A038ACEFE4E5B28549A7267185E;mkt-plan-x-csrf-token=GWF884C46143705C3FF243C4DD305AE57840829A038ACEFE4E5B28549A7267185E;mkt-budgetbcm-x-csrf-token=GWF884C46143705C3FF243C4DD305AE57840829A038ACEFE4E5B28549A7267185E;mtl-exhibition-x-csrf-token=GWF884C46143705C3FF243C4DD305AE57840829A038ACEFE4E5B28549A7267185E;login_uid=24-86-3F-39-C0-69-21-6C-1C-BC-56-41-9E-69-20-A1;login_sid=9E-9E-05-2C-21-C5-62-21-8A-DC-DA-30-B6-C3-05-66-2A-6A-22-D8-FD-87-71-11-31-2A-A5-47-5E-74-02-98-01-CA-EA-F0-2E-D6-0E-54-C8-A3-87-64-BA-AC-70-BA-BD-B0-89-4D-C4-54-80-37;login_logFlag=in;suid=24-86-3F-39-C0-69-21-6C-1C-BC-56-41-9E-69-20-A1;hwssot3=31264256451357;hwsso_login=V004acJSvMCoDZR1HsGNeehVSGdrIq7uqv0YksjghvQ6wLZScfwwMCAFWHZ_aMCWlxDELqUCrAuCVXIVmd5tS_aektXgeejn6aBJe5V_a8V0BUHPqgD_bVMWDN1IUUF_byYsNC9M1qljFzf9mLl1w1Gm80qfw1qjB3KW4wmVzgJu2hwBWJChq4GEY3YHOLDZsrfvOslOYegtbClEfaiQrYo7p94dYxPFu4YenuHNtYfZkMn4bFuBGKpsHmqK0IsqT2Wn9sNL_bX5VWl_b_aqOK_aRQh6ivGcUsusE_bjv0ZalbtAscHtDs9fzSBs_b12IR1HY8lyBcwY0zrjklZkxX8yuUVJHjnrpH_bsQ_c_c;hwsso_am=77-22-F7-0E-84-9F-31-CD;hwssot=F6-89-42-F8-53-4A-7B-8C-4C-61-5D-EF-E8-D7-D5-88; mtl-workplace-x-csrf-token=GW5BA945D1B11413085D5CBF9605A81C084122D918D9260F14E0C65DD7EB1B3EEA 但是在实际请求中是curl --request POST \ --url https://kwesit.huawei.com/mktbudget/apigateway/com.huawei.ipd.mtl.workplace:workplace_service/mtl_onestop/services/mtl/organization/getOrganizationItemList \ --header 'Accept: */*' \ --header 'Accept-Encoding: gzip, deflate, br' \ --header 'Connection: keep-alive' \ --header 'Content-Type: application/json' \ --header 'Cookie: ztsg_uuid=e8ff9be75a2146b3-1989-4d9e-96d3-adb3d69946d2;ztsg_ruuid=4e588150832c6bb2-df45-4f76-83c9-074214ee85f9' \ --header 'Referer: https://kwesit.huawei.com/web/mtl_onestop' \ --header 'User-Agent: PostmanRuntime-ApipostRuntime/1.1.0' \ --header 'X-csrf-token: GW5BA945D1B11413085D5CBF9605A81C084122D918D9260F14E0C65DD7EB1B3EEA' \ --data '{ "pageReq": { "curPage": 1, "pageSize": 10 }, "typeCode": "RepOffice", "itemCode": "", "name": "", "parentCode": "", "businessStateCode": "073287" }'
03-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值