Django JsonResponse 不自动设置 cookie 的解决方案
【背景】
目前在做一个前后端分离的 web 项目,后端使用的是 django 框架,所有的 API 都只返回 json ;就在这个过程中遇到了一个问题,那就是对于所有的 JsonResponse django 都不会主动设置 response 对象的 cookies ,这个就进一步使得 csrftoken 这个 cookie 值永远不会出现在 response 中。
【2、解决方案一】
这个方案的解决思路是:既然 django 不主动的去设置 csrftoken 的值,干脆自己设置它。
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import ensure_csrf_cookie
class GetIDCView(View):
"""
实现 IDC 信息的查询
"""
def get(self,request,pk):
logger.debug(f"查询所有的 idc ")
qs = IDC.objects.all().values('name','city','id')
# 把 QuerySet 变成列表
_lqs = [i for i in qs]
rst = {
'message': '',
'code': 0,
}
rst['data'] = {
'idcs': _lqs
}
response = JsonResponse(rst)
# 手功完成 set_cookie
response.set_cookie('csrftoken','csrf-token-value')
return response
写一个用于检查 cookie 的客户端程序
import requests if __name__ == "__main__":
session = requests.Session()
response = session.get("http://127.0.0.1:8080/hosts/idcs/")
print(response.cookies)
查看返回的 cookie 值
python3 getcookie.py
< RequestsCookieJar[ < Cookie csrftoken=csrf-token-value for 127.0.0.1/ > ] >
这个方案存在的问题:把设置 cookie 作为了业务逻辑的一部分,不方便维护。
【3、解决方案二】
这个方案的解决思路是:直接使用 django 使用的提供的装饰器,这个方案在 django 的官方文档上只是简单的提了一下(只有四行字),所以它的难点在于有没有认真的看过官方文档
from django.views import View
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import ensure_csrf_cookie class GetIDCView(View):
"""
实现 IDC 信息的查询
"""
@method_decorator(ensure_csrf_cookie)
def get(self,request,pk):
# 如果 pk == None 说明是要查询出所有的 IDC 实例
logger.debug(f"查询所有的 idc ")
qs = IDC.objects.all().values('name','city','id')
# 把 QuerySet 变成列表
_lqs = [i for i in qs]
rst = {
'message': '',
'code': 0,
}
rst['data'] = {
'idcs': _lqs
}
return JsonResponse(rst)
查看效果
python3 getcookie.py
< RequestsCookieJar[< Cookie csrftoken=iQQhG2NETVTDnWTAVYBXji1ehLdWesKIGCCxTC1icyIapoS6LrpdUYOZc39qJsto for 127.0.0.1/ > ] >
这个方案的好处在于 View 只要处理业务逻辑就行了。
引用自:https://www.sqlpy.com/blogs/books/2/chapters/15/articles/53
Django JsonResponse 不自动设置 cookie 的解决方案的更多相关文章
- Django中的session和cookie及分页设置
cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...
- 关于启明星系统移除apppath配置,让系统自动获取路径来设置cookie的解决方法
启明星系统底层使用统一接口,特别是用户,用户登录后,都会建立一个 userinfo 的cookie.请看下面2个网址: http://120.24.86.232/book http://120.24. ...
- django设置cookie和session
1 设置cookie 本例中应用名称为cookie 模型model from django.db import models from django.db import models class Us ...
- Laravel5 cookie和session设置 Cookie::queue()自动添加
Cookies Laravel会加密所有已创建的cookie信息,并附加上授权码,当客户端擅自修改cookie信息时,该cookie将被废弃,从而保证安全性. 获取一个指定的cookie值 $valu ...
- Python开发【Django】:分页、Cookie和Session
分页 1.简单分页 涉及xss攻击,需要用到mark_safe方法,使用此方法字符串传输到后端后,已html形式显示,而非字符串 HTML文件: <!DOCTYPE html> <h ...
- Django值聚合,分组,事物,cookie,session
1,聚合(aggregate):是queryset的一个 终止语句,它返回一个包含键值对的字典,键是的名称是聚合值的标识符,值是计算出来的聚合值,键的名称是按照字段和聚合函数自动生成出来的.用到的内置 ...
- Django -聚合分组,FQ操作, cookie, session
一. 聚合查询和分组 1. 聚合 aggregate(*args, **kwargs) 对一组数据进行统计分析, 通过对QuerySet进行计算, 返回一个聚合值得字典. arrgregate()中每 ...
- 转载:postman自动设置token(csrf及authorization token)
原文链接: https://knktc.com/2018/06/03/postman-set-token/ 正文引用: 近期在开发一个Django的项目,由于开启了csrf防护,所以需要在请求的hea ...
- Django框架(十一)--cookie和session
cookie和session组件 cookie 1.cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它 ...
随机推荐
- 5G技术发展迅猛,亚博电竞(yabo055)搭上科技快车
要说当前互联网科技最为令人期待的当属yabo055点康母的5G技术了.自2018年5G标准确定以来,民众就对5G非常的期待,而亚博电竞早已意识到了5G时代的来临势不可挡,早已着手将5G运用于网站和游戏 ...
- 浅谈python面向对象编程和面向过程编程的区别
面向过程:分析出解决问题所需要的步骤,然后用函数把这些步骤一步步实现,使用的时候再一个个的依次调用即可. 优点:性能高 缺点:相较于面向对象而言,不易维护,不易复用,不易扩展 适合于小型的项目面向对象 ...
- 《工作笔记:移动web页面前端开发总结》
工作笔记:移动web页面前端开发总结 移动web在当今的发展速度是一日千里,作为移动领域的门外汉,在这段时间的接触后,发现前端开发这一块做一个小小的总结. 1.四大浏览器内核 1.Trident (I ...
- js中call、apply、bind到底有什么区别?bind返回的方法还能修改this指向吗?
壹 ❀ 引 同事最近在看angularjs源码,被源码中各种bind,apply弄的晕头转向:于是他问我,你知道apply,call与bind的区别吗?我说apply与call是函数应用,指定thi ...
- Run-Time Check Failure #2 - Stack around the variable 's' was corrupted. 出现了 。
程序中存在内存越界,注意数组大小和数据大小.
- HttpModules配置事项
前沿:还是那句话 ASP.NET管道,浏览器 - isAPI32.dll - HttpModules - HttpHandler - 返回客户端Web.Config:<httpModules&g ...
- DNS解析服务结构图
1.DNS(domain name system) 域名 <==> IP地址 DNS解析过程:
- C#_.NetFramework_Web项目_EXCEL数据导出
[推荐阅读我的最新的Core版文章,是最全的介绍:C#_.NetCore_Web项目_EXCEL数据导出] 项目需引用NPOI的NuGet包: A-2:EXCEL数据导出--Web项目--C#代码导出 ...
- 利用Dynamics 365 Customer Engagement的标准导入功能导入附件。
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- Burpsuite抓取https数据包
Burpsuite抓取https包 浏览器代理设置 Burpsuite代理设置 启动Burpsuite,浏览器访问127.0.0.1:8080,点击CA Certificate,下载cacert.de ...