Flask框架

 一 . Python框架的简单介绍

  Django

优点 - 大而全所有组件都是有组织内部开发高度定制化 教科书级别的框架 
缺点 - 大到浪费资源,请求的时候需要的资源较高

  Flask

优势 - 小而精,组件只有Session,第三方机构强烈支持Flask,非常多的三方组件 简单至极
缺陷 - 由于三方组件的关系 稳定性相对较差 Flask-Session

  Tornado

优势 - 异步IO 非阻塞 原生WebSocket
缺陷 - 组件 == 0 关于异步的不好理解 Debug难上加难

  Sanic

优势 - 异步IO 非阻塞 原生WebSocket + 小而精,组件只有Session,第三方机构强烈支持,非常多的三方组件
缺陷 - 复杂度

二 . flask的安装

  

  添加Flask

     

      

  

三 . 实操

# 导入Flask类
from flask import Flask, request, render_template, redirect, session

app = Flask(__name__)  # 实例化Flask对象
# 使用session必须写secret_key,内容随便写,加密作用,session存在浏览器上
app.secret_key = '君不见黄河之水天上来'

# app中的route装饰器,里面必须写上请求方式
@app.route('/', methods=['GET', 'POST'])
def login():  # 视图函数
    if request.method == 'GET':
        return render_template('login.html')
    else:
        if request.form.get('username') == 'attila':
            session['is_login'] = True  # 这里的session赋值与取值都不需要request,但是需要导入
            # 注意,这里的用的是render_template,并且里面不用写request
            return 'Congratulations!!!'  # 这里直接return就可以,不用HttpResponse
        else:
            return redirect('/login')

# 端口5000,本地访问, debug=True是修改代码后自动重启
app.run('0.0.0.0', 5000, debug=True)

   视图函数传参

if request.form.get('username') == 'attila':
    session['is_login'] = True
    return render_template('student_list.html', student_list=STUDENT_LIST)

# 这里只能用=(等号的形式),Django里面可以用{}(大括号形式)

   解决html文件飘黄方法

  

  

  

  

四 . Flask响应

Response必须有的三个:
        # Django三剑客     # Flask三剑客
        1.HTTPResponse    return "hello" 
        2.render          return render_template("login.html")
        3.redircet        return redircet("/login")
    Flask 独有
        4.send_file()     return send_file("文件路径") 
            打开并返回文件内容 确定会在响应头中加入 Content-Type:文件格式 + Content-Length:文件大小(bytes)
        5.jsonify({k:v})  return jsonify({k:v})
            返回一个客户端可以识别的json格式字符串 确定会在响应头中加入 Content-Type:application/json

 五 . Flask Request

# 比较特殊
from flask import request 公共变量
# 公共变量 被覆盖?
1.request.args 获取URL中的数据,get方法,字典类型
2.request.form 获取FormData中的数据,post方法,字典类型
3.request.values 获取args+form 知道就可以了,不要用,会被覆盖
4.request.data 流 # 获取请求体中的原始数据
5.request.json 字典 # 请求头中带有Content-Type:application/json 将请求体中的数据反序列化到json中 但是在data中依然存储这原始数据bytes

# 下面传文件的时候,前端的form里面需要写enctype="multipart/form-data"
6.request.files 获取FormData中的文件数据, 
flie = request.files.get("my_file") # file是FileStorage对象, file.filename 默认是文件本身的名字
file.save(保存路径/新名字)
      
# 记住:request.method

五 . Jinja2 - template

{{}} 引用 and 执行函数 可以直接在里面加()调用函数
{%%} 逻辑代码

# Django中的template只是用了jinja2的一部分

六 . session Flask中的session

from flask import session
app.secret_key = "序列化Session需要的字符串儿"     # 这个是必须要写的
# 在视图函数中
session["key"] = "value"    #  不用request.session

七 . 拓展知识

# 请求支持的协议为http 8种请求中常用的5中
GET(查) POST(增) PUT(改) DELETE(删) OPTIONS(跨越请求)

QPS = 请求每秒钟的次数     QPS == 10  
时间片: cpu 工作一次的时间单位
py 假线程: - 1个核心
真线程 :- 4个核心 - 四个线程

#单引号与双引号,计算机底层的东西
''(单引号)是字符, 固定长度,方便查,最好用它
""(双引号)是字符串, 不固定长度,相对单引号费时
原文地址:https://www.cnblogs.com/attila/p/10680295.html