flask01
一、认识flask
1.简介
1.交互过程
- WebServer监听端口, 并接收外部请求
当接收到请求时, 请求会被放入WebServer的消息队列
WebServer内部的线程池会不断从消息队列中取出请求数据, 并通过CGI规范调用Web应用
WEB应用响应发过来的请求, 然后把处理结果返回给WebServer
最终WebServer把结果封装好并返回可客户端
- CGI:通用网关接口, 描述了服务器和请求处理程序之间传输数据的一种标准, 不同语言都有具体的实现, 如java的servlet技术、php的FCGI、python的WSGI等
- WSGI:PythonWeb服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是Python应用程序或框架和Web服务器之间的一种接口,已经被广泛接受, Python的主流Web框架(Flask、Django等)都是支持WSGI调用的
2.web框架
- 定义:协助开发者快速开发 Web 应用程序的一套功能代码
开发者只需要按照框架约定要求,在指定位置写上自己的业务逻辑代码 - 作用:web网站发展至今,特别是服务器端,涉及到的知识、内容,非常广泛。这对程序员的要求会越来越高。如果采用成熟,稳健的框架,那么一些基础的工作,比如,安全性,数据流控制等都可以让框架来处理,那么程序开发人员可以把精力放在具体的业务逻辑上面。使用框架的优点:
稳定性和可扩展性强
可以降低开发难度,提高开发效率。(避免重复) - 常用框架:
3.flask
- 定义:协助开发者快速开发 Web 应用程序的一套功能代码
开发者只需要按照框架约定要求,在指定位置写上自己的业务逻辑代码 - 优势:“微”, 轻量级web框架, 核心精简, 允许拓展
- 常用扩展包:
Flask-SQLalchemy:操作数据库;
Flask-script:插入脚本;
Flask-migrate:管理迁移数据库;
Flask-Session:Session存储方式指定;
Flask-WTF:表单;
Flask-Mail:邮件;
Flask-Bable:提供国际化和本地化支持,翻译;
Flask-Login:认证用户状态;
Flask-OpenID:认证;
Flask-RESTful:开发REST API的工具;
Flask-Bootstrap:集成前端Twitter Bootstrap框架;
Flask-Moment:本地化日期和时间;
Flask-Admin:简单而可扩展的管理接口的框架
2.虚拟环境
- 作用:独立的python环境, 可以避免同一个框架的多版本冲突
- 解释图:
- 命令:
- 创建虚拟环境 mkvirtualenv -p python3 env22
- 退出虚拟环境 deactivate
- 进入虚拟环境 workon env22
- 查看所有虚拟环境 workon 双击tab
- Windows具体安装步骤
- 安装虚拟环境的命令 :
- sudo pip install virtualenv
- sudo pip install virtualenvwrapper
- 注意:安装完虚拟环境后,如果提示找不到mkvirtualenv命令,须配置环境变量:
- 创建目录用来存放虚拟环境:mkdir $HOME/.virtualenvs
- 打开~/.bashrc文件,并添加如下:export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh - 运行:source ~/.bashrc
- 创建虚拟环境的命令 :
- python2:mkvirtualenv 虚拟环境名称
- python3:mkvirtualenv -p python3 虚拟环境名称
- 提示:如果不指定python版本,默认安装的是python2的虚拟环境
- mac具体安装步骤:https://www.jianshu.com/p/dc7ec6a303e3
- 使用
- 查看虚拟环境的命令 :workon 两次tab键
- 使用虚拟环境的命令 :workon 虚拟环境名称
- 退出虚拟环境的命令 :deactivate
- 删除虚拟环境的命令 :rmvirtualenv 虚拟环境名称(注意:先退出再删除)
- 在虚拟环境安装工具包
- 安装的位置
- python2版本下:~/.virtualenvs/py_flask/lib/python2.7/site-packages/
- python3版本下:~/.virtualenvs/py3_flask/lib/python3.5/site-packages
- python3版本下安装flask-0.10.1的包 :pip install 包名称
- 查看虚拟环境中安装的包 :pip freeze
- 在pycharm中导入虚拟环境
3.最小应用的创建
- 导入flask:from flask import Flask
- 创建接口:app = Flask(name)
- 构建视图函数:
@app.route('/')
def index():
return 'Hello World'
if __name__ == '__main__':
app.run() # app.run的参数可以指定运行的主机IP地址,端口,是否开启调试模式
app.run(host="0.0.0.0", port=5000, debug = True)
二、基本使用
1.第一个flask应用
2.路由的基本定义
3.请求
- 定义:request 就是flask中代表当前请求的 request 对象,其中一个请求上下文变量(理解成全局变量,在视图函数中直接使用可以取到当前本次请求)
- 请求的属性:
- get和post的区别:GET请求 的参数会设置在 URL的查询字符串部分。
POST请求 的参数 会设置在 请求的请求体中。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
从使用场景上, post往往都会携带数据,用于修改服务端数据, 而get的参数可有可无,即使有,也往往用于数据库查询的过滤条件,一般不会用于修改数据库数据
4.响应
- 自定义的响应:
- json响应对象:
- 重定向:
- 中文问题:
from __future__ import unicode_literals
print json.dumps(m,ensure_ascii=False)
=>{"a": "你好"}
5.异常处理
- HTTP 异常主动抛出
- abort 方法:抛出一个给定状态代码的 HTTPException 或者 指定响应,例如想要用一个页面未找到异常来终止请求,你可以调用 abort(404)。
- 参数:抛出状态码的话,只能抛出 HTTP 协议的错误状态码
- 捕获错误
- errorhandler 装饰器:注册一个错误处理程序,当程序抛出指定错误状态码的时候,就会调用该装饰器所装饰的方法
- 参数:code_or_exception – HTTP的错误状态码或指定异常
- 捕获指定异常:
@app.errorhandler(ZeroDivisionError) def zero_division_error(e): return '除数不能为0'
- 例如统一处理状态码为500的错误给用户友好的提示:
@app.errorhandler(500) def internal_server_error(e): return '服务器搬家了'
- 代码图片:
6.状态保持
- 无状态
- 定义:指一次用户请求时,浏览器、服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求。
- 原因:浏览器与服务器是使用 socket 套接字进行通信的,服务器将请求结果返回给浏览器之后,会关闭当前的 socket 连接,而且服务器也会在处理页面完毕之后
- 协议:
- 协议对于事务处理没有记忆能力
- 对同一个 url 请求没有上下文关系
- 每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求是无直接关系的,它不会受前面的请求应答情况直接影响,也不会直接影响后面的请求应答情况
- 服务器中没有保存客户端的状态,客户端必须每次带上自己的状态去请求服务器
- 人生若只如初见
- cookie和session区别
- 状态保存码:
- 删除cookie数据
- cookie过期时间
- 应用场景:
- 最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookie的功用。
- 网站的广告推送,经常遇到访问某个网站时,会弹出小窗口,展示我们曾经在购物网站上看过的商品信息。
- 购物车,用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入Cookie,以便在最后付款时提取信息。