HTTP通讯过程
客户端:
客户端将请求打包成HTTP的请求报文(HTTP协议格式的请求数据),采用TCP传输发送给服务器端
服务器:
服务器接收到请求报文后按照HTTP协议进行解析,根据解析后获知的客户端请求进行逻辑执行
服务器将执行后的结果封装成HTTP的响应报文(HTTP协议格式的响应数据)使用TCP连接将响应报文发送给客户端
客户端:
客户端按照HTTP协议解析响应报文获取结果数据
WEB框架的主要作用:实现路由和视图(业务逻辑处理)
web开发的任务:根据客户端请求实现业务逻辑(视图)编写
flask框架简介
Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展,都需要用第三方的扩展来实现。
Flask没有默认使用的数据库,可以选择MySQL,也可以用NoSQL。其WSGI工具箱采用 Werkzeug(路由模块) ,模板引擎则使用 Jinja2 。
与Django相比:Django提供了
- django-admin快速创建项目工程目录
- manage.py 管理项目工程
- orm模型(数据库抽象层)
- admin后台管理站点
- 缓存机制
- 文件存储系统
- 用户认证系统
而这些,flask都没有,都需要扩展包来提供,常见扩展模块:
- Flask-SQLalchemy:操作数据库
- Flask-migrate:管理迁移数据库
- Flask-Mail:邮件
- Flask-WTF:表单
- Flask-script:插入脚本
- Flask-Login:认证用户状态
- Flask-RESTful:开发REST API的工具
- Flask-Bootstrap:集成前端Twitter Bootstrap框架
- Flask-Moment:本地化日期和时间
flask请求处理流程:
当客户端想要获取资源时,一般会通过浏览器发起HTTP请求,Web服务器使用WSGI(Web Server Gateway Interface)协议把来自客户端的请求都交给Flask程序实例;
Flask使用Werkzeug来做路由分发,其根据每个URL请求找到具体的视图函数。通过调用视图函数进行处理;
在视图函数处理获取到数据后,把数据传入HTML模板文件中,模板引擎负责渲染模板填充数据,然后由Flask返回响应数据给浏览器,最后浏览器显示返回的结果。
flask程序实例简介
Flask类初始化参数:导入路径、静态文件访问路径、静态文件目录、模板文件目录
- import_name:导入路径(寻找静态文件目录与模板文件目录位置的参数)
- static_url_path:访问静态资源的URL前缀,以此确定访问的路径是静态资源还是视图函数(默认为static:http://127.0.0.1:5000/static/index.html)
- static_folder:静态文件目录(以当前模块所在目录为基准进行寻找)
- template_folder:模板文件目录
flask程序实例配置参数使用:文件、对象、字典的形式
app.config.from_pyfile()
app.config.from_object()
app.config["配置项"] = 值
视图函数获取配置项:app.config.get("配置项")、current_app.config.get("配置项")
app.run()参数:host port debug
- host:主机地址(0.0.0.0)
- port:端口
- debug:调试模式
from flask import Flask
# flask应用实例对象:__name__为当前模块名
# flask以当前模块所在目录作为项目的工程目录:static为静态目录、templates为模板目录
app = Flask(__name__)
# 路径和视图函数使用app.route(路径)装饰器进行绑定
@app.route('/')
def hello_world():
"""定义视图函数"""
return 'Hello World!'
if __name__ == '__main__':
app.run()