Flask、Tornado

本文详细介绍了Flask和Tornado两个Python Web框架。对于Flask,讲解了响应(包括字符串返回、模板渲染和重定向)、请求的处理以及蓝图的使用。在Tornado部分,阐述了环境搭建、响应方式、请求操作,并展示了如何实现WebSocket服务器的搭建,强调其在高并发场景中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 环境搭建

  1. 创建一个 python 项目、并设置新的虚拟环境

  2. 安装 tornado 库
    pip install tornado

  3. 在项目的根下、新建一个 app.py 模块作为 tornado 启动类

  4. app.py 下 进行 tornado web开发

  5. 静态资源与模板配置:
    在这里插入图片描述

# 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 : 是一个长链接技术


  1. 视图类(接入点函数)继承 tornado.websocket.WebSocketHandler

  2. 重写 父类中, open, on_message, on_close, check_origin 四个方法

  • open 在 建立 websocket 链接的时候 触发的
  • on_message 是 服务器 接收到 客户端发送的 信息的时候 触发的
  • on_close 是服务器/客户端 断开链接的时候触发的
  • check_origin : 如果使用的话,retrun true ,代表允许跨域访问
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值