wkt blog

  • About
  • Video
  • About
  • Video

Author: admin

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 […]

支付宝付款(python)

by admin/February 21, 2018July 22, 2018/python基础, 笔记

其实蚂蚁金服提供了开放平台的官方SDK,但是github仅有十几个star, 用的可以试一下 这是根据文档中请求字段和签名流程写的支付宝的SDK, 只有一个类, 用起来也算方便. 支付宝付款的整个过程参考付款结算的所有参数, 其中对请求字段的处理最困难与sign字段的签名以及回调url的验证上, 详见sign字段的签名过程. 付款源码(复制即用): from datetime import datetime from Crypto.PublicKey import RSA from Crypto.Signature import PKCS1_v1_5 from Crypto.Hash import SHA256 from base64 import b64encode, b64decode from urllib.parse import quote_plus from urllib.parse import urlparse, parse_qs from […]

vim: 显示树形目录插件NERDTree安装和常用指令

by admin/February 18, 2018July 19, 2018/其他, 常用备份, 笔记

一. 安装: 将压缩包内文件放入指定目录即可: 将plugin/NERD_tree.vim拷贝~/.vim/plugin, doc/NERD_tree.txt拷贝到~/.vim/doc. wget http://www.vim.org/scripts/download_script.php?src_id=17123 -O nerdtree.zip unzip nerdtree.zip mkdir -p ~/.vim/{plugin,doc} cp plugin/NERD_tree.vim ~/.vim/plugin/ cp doc/NERD_tree.txt ~/.vim/doc/ 二. 绑定快捷方式和其他常用快捷键 此时打开vim即可使用:NERDTree来显示属性目录结构 绑定快捷键f10: :map <F10> :NERDTreeToggle<CR> 切换工作台和目录: ctrl + w + h 光标 focus 左侧树形目录 ctrl + w + […]

调试工具ipdb

by admin/February 7, 2018July 19, 2018/python基础, 常用备份

由于vim没有pycharm的强大调试功能, 值得借助ipdb了. 安装: pip install ipdb 使用方式一: 直接在代码中插入断点: import ipdb # … ipdb.set_trace() # … 使用python your_file.py运行后, 程序会卡在打断点处, 并打开ipython. 使用方式二: 进行单步调试: python -m ipdb your_file.py 常用的指令: help,帮助 list 或 l,显示当前行的上下文 next 或 n,下一步(step over) step 或 s,进入函数内部(step in) p 或 […]

线程池ThreadPoolExecutor

by admin/January 8, 2018July 19, 2018/python基础, 笔记

使用futures模块: 线程池可以用来限制同时运行的最大线程数; 在主进程中获取某一个线程或者某一个任务的状态或者返回值; 当一个线程运行完成时主线程可以立即知道; 让多线程和多进程的编码接口一致。 一. 函数体: def get_html(sleep_time): time.sleep(sleep_time) # print(‘get_page success’, sleep_time) return ‘success,{}’.format(sleep_time) 二. 任务操作 submit提交 使用submit提交函数到线程池, 打开一个线程, submit是立即返回, 非阻塞方法 from concurrent.futures import ThreadPoolExecutor if __name__ == ‘__main__’: # 参数表示可以同时执行的嘴阀线程数量 excu = ThreadPoolExecutor(3) # 使用submit提交函数到线程池, 打开一个线程, submit是立即返回, […]

flask 多对多

by admin/January 6, 2018July 19, 2018/flask, 笔记

在flask中实现字段间多对多关系, 需要手动创建中间的辅助表, 对于这个辅助表, 强烈建议不要使用模型,而是采用一个实际的表, 因为这个辅助表是永远不会被实例化使用的. 文档中提供的例子: tags = db.Table(‘tags’, db.Column(‘tag_id’, db.Integer, db.ForeignKey(‘tag.id’)), db.Column(‘page_id’, db.Integer, db.ForeignKey(‘page.id’)) ) class Page(db.Model): id = db.Column(db.Integer, primary_key=True) # secondary: 在多对多关系, 指定关联表的名称 tags = db.relationship(‘Tag’, secondary=tags, backref=db.backref(‘pages’, lazy=’dynamic’), lazy=’dynamic’) class Tag(db.Model): id = db.Column(db.Integer, primary_key=True) 例2 […]

flask_sqlalchemy: 重写查询方法例子(重写filter_by)

by admin/November 21, 2017July 19, 2018/flask, 其他, 笔记

引出 比如某个项目中, status是逻辑删除的标志, 每次查询都需要加上status=1, Gifts.query.filter_by(uid=current_user.id, isbn=isbn, launched=False, status=1) 非常的不方便, 重写filter_by是一个不错的选择 重写 filter_by等查询函数定义在sqlalchemy.orm.Query中, flask_sqlalchemy.BaseQuery继承了orm的Query, 因此我们重写的时候可是直接继承BaseQuery. 自定义filter_by的代码为: class Query(BaseQuery): def filter_by(self, **kwargs): if ‘status’ not in kwargs.keys(): kwargs[‘status’] = 1 return super(Query, self).filter_by(**kwargs) 指定query类 但是这时候, 系统并不知道要使用我们重写的filter_by. SQLAlchemy类的构造函数中为我们提供了可指定的query_class参数: def __init__(self, app=None, use_native_unicode=True, session_options=None, […]

Posts navigation

1 … 9 10 11

Recent Posts

  • 自建Pypi反向代理服务器
  • Allow All Content Security Policy
  • How to fetch all Git branches
  • 手动申请 Let’s Encrypt 泛域名证书
  • A Desktop-Agnostic Way to Change DNS Server

Archives

  • 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.