上一章对django的HttpResponse的源码进行分析,对上一篇存在的cookie源码问题,用这篇博客进行分析,若想看关于HttpResponse详解的可点击django模块http之HttpResponse源码解析,
附上http下cookie.py的全部内容,源码下载地址还是在这里,3.0.x,django源码

from http import cookies# For backwards compatibility in Django 2.1.
SimpleCookie = cookies.SimpleCookie# Add support for the SameSite attribute (obsolete when PY37 is unsupported).
cookies.Morsel._reserved.setdefault('samesite', 'SameSite')def parse_cookie(cookie):"""Return a dictionary parsed from a `Cookie:` header string."""cookiedict = {}for chunk in cookie.split(';'):if '=' in chunk:key, val = chunk.split('=', 1)else:# Assume an empty name per# https://bugzilla.mozilla.org/show_bug.cgi?id=169091key, val = '', chunkkey, val = key.strip(), val.strip()if key or val:# unquote using Python's algorithm.cookiedict[key] = cookies._unquote(val)return cookiedict
  1. 导入http的cookies这里无法追踪到cookies源码大概查了一些资料Python3标准库:http.cookies HTTP cookie
  2. 使用cookies.SimpleCookie创建对象,用SimpleCookie进行接收,也就是之后导入该文件可以直接导入SimpleCookie进行使用
  3. 翻译# Add support for the SameSite attribute (obsolete when PY37 is unsupported).
    #添加对SameSite属性的支持(当PY37不被支持时作废)。
    cookies.Morsel._reserved.setdefault(‘samesite’, ‘SameSite’)
    大概是源码中可以根据python版本进行属性支持和设置,这里查不到源码(记注1)
  4. parse_cookie函数中的注释:Return a dictionary parsed from a Cookie: header string,
    返回一个从’ Cookie: '头字符串解析的字典这里具体的数据生成,之后运行试试是否能得到结果和这个函数用法(记注2)
    下图为parse_cookie函数对cookie数据进行处理的解析说明。
    下面代码是HttpResponseBase中的操作cookie的方法也是HttpResponseBase源码解析博客中未解决的位置,现在来看。
    def set_cookie(self, key, value='', max_age=None, expires=None, path='/',domain=None, secure=False, httponly=False, samesite=None):"""Set a cookie.``expires`` can be:- a string in the correct format,- a naive ``datetime.datetime`` object in UTC,- an aware ``datetime.datetime`` object in any time zone.If it is a ``datetime.datetime`` object then calculate ``max_age``."""self.cookies[key] = valueif expires is not None:if isinstance(expires, datetime.datetime):if timezone.is_aware(expires):expires = timezone.make_naive(expires, timezone.utc)delta = expires - expires.utcnow()# Add one second so the date matches exactly (a fraction of# time gets lost between converting to a timedelta and# then the date string).delta = delta + datetime.timedelta(seconds=1)# Just set max_age - the max_age logic will set expires.expires = Nonemax_age = max(0, delta.days * 86400 + delta.seconds)else:self.cookies[key]['expires'] = expireselse:self.cookies[key]['expires'] = ''if max_age is not None:self.cookies[key]['max-age'] = max_age# IE requires expires, so set it if hasn't been already.if not expires:self.cookies[key]['expires'] = http_date(time.time() + max_age)if path is not None:self.cookies[key]['path'] = pathif domain is not None:self.cookies[key]['domain'] = domainif secure:self.cookies[key]['secure'] = Trueif httponly:self.cookies[key]['httponly'] = Trueif samesite:if samesite.lower() not in ('lax', 'strict'):raise ValueError('samesite must be "lax" or "strict".')self.cookies[key]['samesite'] = samesitedef setdefault(self, key, value):"""Set a header unless it has already been set."""if key not in self:self[key] = valuedef set_signed_cookie(self, key, value, salt='', **kwargs):value = signing.get_cookie_signer(salt=key + salt).sign(value)return self.set_cookie(key, value, **kwargs)def delete_cookie(self, key, path='/', domain=None, samesite=None):# Most browsers ignore the Set-Cookie header if the cookie name starts# with __Host- or __Secure- and the cookie doesn't use the secure flag.secure = key.startswith(('__Secure-', '__Host-'))self.set_cookie(key, max_age=0, path=path, domain=domain, secure=secure,expires='Thu, 01 Jan 1970 00:00:00 GMT', samesite=samesite,)

源码中包含设置cookie,删除cookie等主要对cookie的操作!

django模块http之cookie源码解析相关推荐

  1. 未能加载文件或程序集rsy3_abp vnext2.0之核心组件模块加载系统源码解析

    abp vnext是abp官方在abp的基础之上构建的微服务架构,说实话,看完核心组件源码的时候,很兴奋,整个框架将组件化的细想运用的很好,真的超级解耦.老版整个框架依赖Castle的问题,vnext ...

  2. abp vnext2.0之核心组件模块加载系统源码解析

    abp vnext是abp官方在abp的基础之上构建的微服务架构,说实话,看完核心组件源码的时候,很兴奋,整个框架将组件化的细想运用的很好,真的超级解耦.老版整个框架依赖Castle的问题,vnext ...

  3. Android xUtils3源码解析之图片模块

    本文已授权微信公众号<非著名程序员>原创首发,转载请务必注明出处. xUtils3源码解析系列 一. Android xUtils3源码解析之网络模块 二. Android xUtils3 ...

  4. Android xUtils3源码解析之注解模块

    本文已授权微信公众号<非著名程序员>原创首发,转载请务必注明出处. xUtils3源码解析系列 一. Android xUtils3源码解析之网络模块 二. Android xUtils3 ...

  5. Android xUtils3源码解析之数据库模块

    本文已授权微信公众号<非著名程序员>原创首发,转载请务必注明出处. xUtils3源码解析系列 一. Android xUtils3源码解析之网络模块 二. Android xUtils3 ...

  6. abp vnext2.0核心组件之DDD组件之实体结构源码解析

    接着abp vnext2.0核心组件之模块加载组件源码解析和abp vnext2.0核心组件之.Net Core默认DI组件切换到AutoFac源码解析集合.Net Core3.1,基本环境已经完备, ...

  7. abp vnext2.0核心组件之.Net Core默认DI组件切换到AutoFac源码解析

    老版Abp对Castle的严重依赖在vnext中已经得到了解决,vnext中DI容器可以任意更换,为了实现这个功能,底层架构相较于老版abp,可以说是进行了高度重构.当然这得益于.Net Core的D ...

  8. Django的rest_framework的视图之Mixin类编写视图源码解析...

    Django的rest_framework的视图之Mixin类编写视图源码解析 Mixin类编写视图 我们这里用auther表来做演示,先为auther和autherdetail写2个url 1 2 ...

  9. python处理回显_Python中getpass模块无回显输入源码解析

    本文主要讨论了python中getpass模块的相关内容,具体如下. getpass模块 昨天跟学弟吹牛b安利Python标准库官方文档的时候偶然发现了这个模块.仔细一看内容挺少的,只有两个主要api ...

最新文章

  1. springboot RestTemplate httpclient
  2. 关于QVariant 的学习一点分享
  3. JavaEE课程目标、个人目标、互联网应用和企业级应用的区别
  4. Millenium Leapcow POJ - 2111 (千禧年跳牛)(贪心找最长路径,记忆化)
  5. 类成员的访问修饰符和可访问性
  6. MFC模态与非模态对话框的创建与销毁
  7. OpenShift 4 - 用 Quay Operator 安装 Quay 环境(4.10 修正)
  8. System Verilog 线程间的通信——事件,信箱与旗语
  9. list()的相关问题
  10. 基于stc15f2k60s2芯片单片机编程(流水灯)
  11. 工作流引擎之-activiti6使用
  12. Eviews回归结果解读
  13. Android动画的使用——补间动画
  14. Java问题---扑克牌
  15. Selenium.Chrome.ChromeDriver指纹去除
  16. 护眼台灯界的“变形金刚”,性能爆表还帅气十足 | 钛空智慧星球推荐
  17. 前端性能优化之优化图片
  18. SuperMap iDesktop常见问题解答集锦(五)
  19. Windows10系统安装Oracle 11gR2
  20. boss直聘python_爬Boss直聘,分析2019下半年Python工作现状

热门文章

  1. 一站式开发一个安卓APP-测试与发布篇(build variants的应用)
  2. 蓝桥杯真题 16省Ja3-搭积木(小明最近喜欢搭数字积木, 一共有10块积木,每个积木上有一个数字,0~9。...)搭积木规则: 每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。 最
  3. Multi-target tracking by Lagrangian relaxation to min-cost network flow
  4. SSM大学生心理健康服务平台毕业设计源码071131
  5. Android [Camera 源码] 相机 HAL3(Camera3) Google官方文档(二)
  6. 三菱m64计算机连接参数,三菱M64OPTION参数讲义资料.docx
  7. java枚举类型赋值_java枚举类型(转载)
  8. 盖师贝格-撒克斯通(GS)算法及其改进算法
  9. fisco区块链浏览器编译合约失败
  10. QT 圆形头像绘制方法