wkt blog

  • About
  • Video
  • About
  • Video

Month: March 2018

更好的对象转字典

by admin/March 30, 2018July 19, 2018/python基础, 其他

一. 方便但不完美的__dict__ 对象转字典用到的方法为__dict__. 比如对象对象a的属性a.name=’wk’, a.age=18, 那么如果直接将使用a.__dict__获得对应的字典的值为: {name: ‘wk’, aget:18}, 很方便, 但是也存在一些限制. 其不完美之处在于: 比如: class A(object): name = ‘wukt’ age = 18 def __init__(self): self.gender = ‘male’ a = A() print(a.__dict__) 此时的打印结果是: {gender: ‘male’} 但是类变量name和age无法一同转换. 二. 使用dict 使用dict的方式如下, 如果直接使用会报错. a = […]

flask: 內置HttpException的rest风格改进

by admin/March 28, 2018July 19, 2018/flask, python基础

在api的设计中, 无论异常还是正常数据均需要服务器以json的格式返回, 为了对异常的统一管理, 同时为了后续更加方便的返回和验证数据, 我们自定义异常返回类. 设计异常数据的返回格式为: { “error_code”: 999, “msg”: “sorry, we make a mistake”, “request”: “POST /v1/client/register” } 异常值分别代表: 999 未知错误 1006 客户端错误 1007 服务器错误 1000 参数错误 … 其中json中的request包含了请求的方法和路径. 一. 定义一个最基本的类 二. 参数错误和客户端错误类 三. 所有的异常 一. 定义一个最基本的类 为了使代码简洁, 首先定义一个最基本的类, […]

JWT vs Session

by admin/March 19, 2018July 22, 2018/flask, python基础, 笔记

一. session 1.1 session对于服务器的开销 在传统的用户登录认证中,都是采用session方式。用户登录成功,服务端会保证一个session,当然会给客户端一个sessionId,客户端会把sessionId保存在cookie中,每次请求都会携带这个sessionId。cookie+session这种模式通常是保存在内存中,而且服务从单服务到多服务会面临的session共享问题,随着用户量的增多,开销就会越大 1.2 session对于服务扩展性的限制 用户认证之后,服务端做认证记录,如果认证的记录被保存在内存中的话,这意味着用户下次请求还必须要请求在这台服务器上,这样才能拿到授权的资源,这样在分布式的应用上,相应的限制了负载均衡器的能力。这也意味着限制了应用的扩展能力。 1.3 session+cookie认证方式存在的风险 CSRF: 因为是基于cookie来进行用户识别的, cookie如果被截获,用户就会很容易受到跨站请求伪造的攻击。 二. jwt(json web token) jwt的认证方式只需要服务端生成token,客户端保存这个token,每次请求携带这个token,服务端认证解析就可。 2.1 jwt生成的流程 客户端使用用户名和密码请求服务器 服务器验证后返回一个jwt 客户端存储jwt, 每次请求都会携带这个jwt 服务器验证jwt, 并返回数据 2.2 jwt的构成: jwt有三部分构成: header, payload, signature 2.2.1 header(头部) jwt头部中承载了两个信息, 完整的头部类似与: { ‘typ’: ‘JWT’, ‘alg’: […]

本地分支落后远程分支

by admin/March 15, 2018April 11, 2020/其他

当本地分支落后远程分支时, 推送会被拒绝 解决方案为: 先拉取远程代码: git pull origin dev 然后正常提交: git commit -m ‘dev’ git push origin dev

flask工作原理图

by admin/March 15, 2018April 21, 2020/flask, python基础, 笔记

本文是初学时根据慕课网视频flask高级编程(鱼书)第五章, 第六章边学习边整理, 如有错误请指正, 谢谢. 整体过程   一个请求进入flask框架后, flask会首先实例化一个Request Context封装了这次请求的相关信息(Request), 然后将请求上下文推入栈_request_ctx_stack(这是LocalStack的一个实例).   在RequestContext对象入栈之前会检查App Context对应栈栈顶的元素, 如果不是当前的app, 则会先将app推入. 因此如果在一个请求中使用(注意是在请求中)使用current_app是不需要手动push的.   current_app取得是_app_ctckx_stack 的栈顶元素中的app属性, 这个属性就是我们自己创建的app=Flask(__name__), 如果栈顶为空,则提示unbound, 同样的request指的是_request_ctx_stack的栈顶对应对象, 当一个请求结束的时候会出栈.   Local 与 LocalStack: werkzeug, LocalStack作为线程隔离对象栈的基本特性 其他 手动压栈和出栈 如果要在没有请求的情况下使用核心对象需要手动push和pop, 一个例子 ctx = app.app_context() ctx.push() # 入栈, push是LocalStack中的方法 # 其他语句 ctx.pop() # […]

带有参数的装饰器

by admin/March 9, 2018July 19, 2018/flask, python基础, 笔记

1. 函数带多个参数 # 普通的装饰器, 打印函数的运行时间 def decrator(func): def wrap(*args, **kwargs): start_time = time.time() res = func(*args, **kwargs) end_time = time.time() print(‘运行时间为’, end_time-start_time) return res return wrap 2. 装饰器带有多个参数 当装饰器带有多个参数的时候, 装饰器函数就需要多加一层嵌套: 比如: def decrator(*dargs, **dkargs): def wrapper(func): def _wrapper(*args, **kargs): print […]

Recent Posts

  • 读取txt大文件并插入到mysql
  • 自建Pypi反向代理服务器
  • Allow All Content Security Policy
  • How to fetch all Git branches
  • 手动申请 Let’s Encrypt 泛域名证书

Archives

  • February 2021
  • December 2020
  • November 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • January 2019
  • December 2018
  • November 2018
  • September 2018
  • August 2018
  • May 2018
  • April 2018
  • March 2018
  • February 2018
  • January 2018
  • November 2017
  • October 2017
  • September 2017
  • June 2017
  • May 2017
  • April 2017
  • April 2016

友情链接

  • Harttle
  • 张俊杰的微博客
  • 蔣振飞的博客
  • 饲养员的窝
Proudly powered by WordPress | Theme: ShowMe by NEThemes.