文章目录
flask
相比django更轻量级
支持wsgi协议
flask响应
1、直接 return 一个 字符串(可以是HTML代码)
2、跳转到 一个 模板页面 render_template
3、重定向到一个 路由中 redirect
flask请求
from flask import request
args :接收GET请求的参数
form : 接受 POST 请求的参数
files : 获取上传的文件对象
- request的常见参数:
args:
ImmutableMultiDict([])
content_type:
None
cookies:
{'csrftoken': 'mvcCN83xIrgYvjDBCZkvcFvEyyjE5Ba8q7bgwrmMxbe533oG2xjLADkZC1pKB9QS'}
data:
b''
files:
ImmutableMultiDict([])
headers:
Host: 127.0.0.1:5000
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36
Sec-Fetch-User: ?1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
127.0.0.1 - - [12/Dec/2019 11:23:17] "GET /login HTTP/1.1" 200 -
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: csrftoken=mvcCN83xIrgYvjDBCZkvcFvEyyjE5Ba8q7bgwrmMxbe533oG2xjLADkZC1pKB9QS
method:
GET
path:
/login
query_string:地址栏传入的参数
b''
referer:
None
form:
ImmutableMultiDict([('username', 'wsm'), ('password', '666888')])
- 接受页面参数的方法有下列常见的操作:
get(key) : 通过键获取 单个 value
getlist(key): 通过键 获取 value(列表)
to_dict() : 将页面参数转成 字典格式
query_string :获取 GET参数,以 b’a=1&b=2’ 表示
method : 获取请求方式
content_type : 获取请求的类型
cookies : 获取 cookie
headers : 获取请求头
path : 获取请求地址
referrer : 获取数据的来源
蓝图
1、在项目的根下,新建一个包 (包的作用类似于Django的应用)
2、在包下,新建一个 views.py (用来定义视图)
3、在 views.py 中,引入 蓝图
from flask.blueprints import Blueprint
from flask import render_template
user = Blueprint("user", __name__)
@user.route("/list")
def list():
"""
查询所有的用户、并返回 List页面
:return:
"""
users = [
{"name":"张三", "sex":"男", "tel": "131"},
{"name": "里斯", "sex": "男", "tel": "132"},
]
return render_template("list.html", users=users)
4、在 app.py 中, 注册蓝图
from user.views import user
...
app.register_blueprint(user)
...
Tornado
tornado是一个基于网络开发的一个WEB框架
运用于高并发开发
Tornado 环境搭建
-
创建一个 python 项目、并设置新的虚拟环境
-
安装 tornado 库
pip install tornado
-
在项目的根下、新建一个
app.py
模块作为 tornado 启动类 -
在
app.py
下 进行 tornado web开发 -
静态资源与模板配置:
# setting.py
import os
BASE_DIR = os.path.dirname(__file__)
app_settings = {
'static_path': os.path.join(BASE_DIR, 'static'),
'debug': True,
'template_path': os.path.join(BASE_DIR, 'templates')
}
Tornado 中的响应方式
self.write(content) : 返回content内容
self.render(template_name, context): 跳转到模板中
self.redirect(url) : 重定向到指定的请求中
Tornado 中的请求的操作
-
self.request
arguments : 获取所有的参数
query_arguments : 获取get参数
body_arguments : 获取post 参数
method
path -
self 的方法:(快捷获取参数的方式)
get_argument(key) : 获取指定的 key 对应的 单值
get_arguments(key) : 获取指定的 key 对应的 多值
import tornado.web
class UserWebHandler(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
print(self.request.path)
# 输入127.0.0.1:8888/2,获得/2
def post(self, *args, **kwargs):
# 1. 响应字符串
self.write("hello world")
# # 2. 响应模板
# self.render('index.html', username='abc')
# # 3. 重定向
# self.redirect('/')
# # self.request的方法:
#
# print(self.request.arguments)
# # {'id': [b'1'], 'name': [b'wsm'], 'gender': [b'2'], 'age': [b'20']}
#
# print(self.request.query_arguments)
# # {'id': [b'1'], 'name': [b'wsm']}
#
# print(self.request.body_arguments)
# # {'gender': [b'2'], 'age': [b'20']}
# # self的方法:
# self.get_argument()
# self.get_arguments()
用Tornado实现 WebSocket 服务器的搭建
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。——https://www.runoob.com/html/html5-websocket.html
Http: 是一个无状态的协议
WebSocket : 是一个长链接技术
-
视图类(接入点函数)继承 tornado.websocket.WebSocketHandler
-
重写 父类中, open, on_message, on_close, check_origin 四个方法
- open 在 建立 websocket 链接的时候 触发的
- on_message 是 服务器 接收到 客户端发送的 信息的时候 触发的
- on_close 是服务器/客户端 断开链接的时候触发的
- check_origin : 如果使用的话,retrun true ,代表允许跨域访问