request -> response
uwsgi 可以粗略的理解为tomcat吧

pip install flask
学习目标

json APi
数据库CRUD
redis缓存
全局的异常处理

flask + gunicorn

$ gunicorn -w 4 myapp:app

flask + uwsgi 部署

uwsgi --http 0.0.0.0:8000 --wsgi-file flask_uwsgi.py --callable app --master

flask_uwsgi.py

from app import appif __name__ == "__main__":app.run()

app.py

from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello_world():return 'Hello World!'if __name__ == '__main__':app.run()

学习flask

我确实是从spring来考虑flask的,比如某个功能在spring中是存在的,那么flask要怎么实现呢?

  1. 第一步创建一个flask应用
from flask import Flask
app = Flask(__name__)
if __name__ == "__main__"app.run()
  1. 路由配置规则
    获取url中的值
    获取参数中的值
    指定方法
  2. 模版渲染
  3. 在request之前和之后before_request/ after_request
    很像spring里面的拦截器,比如可以在这里进行登录验证
  4. http状态相关
    redirect
    abort
  5. 一些自己可以丰富的功能
    To register an error handler, use the errorhandler() decorator.

7.The Application Context

flask 背后的故事

访问不同视图处理函数和多个用户访问同一个视图处理函数,faslk对应方式有变化吗?
flask 不同view函数的handler1, handler2使用request
可以参考理解java里面的threadLocal

Python中获得Thread Local的两种方法
「第一种方法」
使用Python自带的threading.local线程局部变量。
问题:它只支持在线程之间作为局部变量

「第二种方法」
使用Werkzeug实现的werkzeug.local.Local类,它的优势在于支持在协程之间作为局部变量。他会优先使用Greenlet的ID而不是现成的ID来保存状态词典。

简单的翻看flask代码,初步的认识是flask是一层包装,在她之下是werkzeug, jinja2

app.run() 在这里是简单的调用了werkzeug的run_simple(), 而run_simple使用的是socket.listen(128)

流程
http -> wsgi server -> application
application模型如下

def application(environ, start_response):start_response('200 OK', [('Content-Type', 'text/plain')])return ['Hello World!']
  1. wsgi server这里是怎么处理多个请求的?多进程?多线程?单进程,单线程,异步io
def run_simple(hostname, port, application, use_reloader=False,use_debugger=False, use_evalex=True,extra_files=None, reloader_interval=1,reloader_type='auto', threaded=False,processes=1, request_handler=None, static_files=None,passthrough_errors=False, ssl_context=None):

可以通过os.getpid()查看进程id
注意 debugger为False时候, threaded=True才生效
run_simple(‘127.0.0.1’, 5000, app, use_debugger=False, use_reloader=True, processes=1, threaded=True)

通过threading.currentThread().ident查看线程id
2. from flask import request,这里的request在不同线程中为什么不会相互干扰?

python-flask-uwsgi体验相关推荐

  1. uwsgi+python+flask+nginx服务器部署

    flask+uwsgi+nginx 服务器 安装centos7系统 1. 系统选择CentOS系统就好(推荐选择CentOS7系统) 2. 用户名:root 3. 密码自己设定(自己记住) 安装宝塔面 ...

  2. python flask实战订餐系统微信小程序-60nginx + uwsgi 实现多进程访问

    python flask实战订餐系统微信小程序-60nginx + uwsgi 实现多进程访问 B站配套视频教程观看 uwsgi多进程配置 uwsgi.ini配置 nginx和uwsgi通过配置文件s ...

  3. 树莓派构建内网域名访问php/python 多个虚拟web主机 bind9 nginx flask uwsgi pfm php7 python3

    文章目录 0 前言 1 php安装 2 nginx安装 3 python3安装 4 php web设置与测试 5 flask uwsgi 设置与测试 5.1 安装flask 5.2 安装uwsgi 5 ...

  4. python flask快速入门与进阶 百度云_Python Flask快速入门与进阶

    课程目录 1-1 Python Flask快速入门与进阶.mp4 2-1 windows环境安装开发环境 (上).mp4 2-2 windows环境安装开发环境 (下).mp4 2-3 配置开发环境. ...

  5. python flask实现博客系统_基于Flask的博客网站设计与实现

    涂远杰 郑剑 摘要:该博客系统是一款分享型博客,注重个人的学习心得.生活等方面的记录.后台基于Python中的Flask框架开发,还涉及爬虫,数据库使用的是轻型的SQLite,同时,前端页面的实现涉及 ...

  6. python开源项目博客_Blog_mini首页、文档和下载 - Python Flask开源博客 - OSCHINA - 中文开源技术交流社区...

    使用Blog_mini,你完全不用担心博客的管理问题! Blog_mini是一个用Python Flask开发的,拥有简洁页面(支持响应式布局!)和强大后台管理功能的开源博客系统,使用Blog_min ...

  7. Build Docker image of a Python Flask app【转载】

    原文地址:https://stackoverflow.com/questions/41750366/build-docker-image-of-a-python-flask-app I'm tryin ...

  8. python flask安装_python flask安装和命令详解

    Flask Web开发实战学习笔记 Flask简介 Flask是使用Python编写的Web微框架.Web框架可以让我们不用关 心底层的请求响应处理,更方便高效地编写Web程序.因为Flask核心简 ...

  9. python自动化测试平台github_GitHub - DangKaio/FXTest: 接口自动化测试平台——python+flask版,支持http协议...

    FXTest测试平台 flask + Python3 实现的API自动化测试平台. 下面有介绍python flask部署相关的文章链接.为自己部署的记录文章 前后端开始进行分离,通过接口进行交互 敬 ...

  10. Flask+uwsgi+Nginx环境搭建

    2019独角兽企业重金招聘Python工程师标准>>> 开源软件准备 需要的软件列表: setuptools-33.1.1.zip Python-2.7.13.tgz pip-9.0 ...

最新文章

  1. Mock.js mysql_平台支持mock功能—未完成版
  2. js --- for in 和 for of
  3. 2019区块链广泛应用于能源领域 ,DMA基金会,服务于区块链产业
  4. c# WinForm开发 DataGridView控件的各种操作
  5. 【企业管理】高效会议关注点
  6. 计算机二级怎么测试c语言,全国计算机等级测试二级C语言视频教程(完整版).doc...
  7. PWN-PRACTICE-BUUCTF-25
  8. Ubuntu下的Linux内核的编译及安装
  9. 【算法笔记】:区间覆盖问题:贪心算法
  10. (转)向浑水(Muddy Waters Research)学习如何调查公司
  11. 在精简版的xp添加删除程序里面没有IIS的解决方法
  12. am3352 项目记录
  13. 三分钟搭建你的个人支付接口
  14. python selenium下载电子书
  15. 日记记事本java实训,黑马学习日记  GUI实现简单记事本功能
  16. 诺基亚NBU备份文件名片导出程序 vCard助手
  17. IE浏览器收藏夹里面的内容不显示
  18. linux下微信/qq的aud、silk音频文件格式与mp3格式互转,获取音频时长的方法,附问题分析和java代码。
  19. Word 2016 如何设置黑底白字
  20. mysql创建每天执行计划_mysql执行计划

热门文章

  1. HTML5中id、name、class 区别
  2. 类的定义与抽取 java 1615134563
  3. 草稿 断开式绑定combobox
  4. 类与对象 格式小结 java 1202
  5. PDO连接MySql数据库
  6. 瀑布流方式三(方式二的升级版)
  7. MVC为Html对象建立一个扩展方法,使用自己的控件就像使用TextBox一样方便
  8. MVC3教程之实体模型和EF CodeFirst
  9. 新手教程——在Linux Mint 16中找到保存的WiFi密码
  10. 甲骨文全面进军云计算市场