• 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个核心 - 四个线程
    
    #单引号与双引号,计算机底层的东西
    ''(单引号)是字符, 固定长度,方便查,最好用它
    ""(双引号)是字符串, 不固定长度,相对单引号费时
  • 相关阅读:
    力扣516题、72题、1312题(最长回文子序列,编辑距离,构造回文串)
    力扣53题、1143题(最大子数组问题、最长公共子序列)
    力扣704题、34题(二分查找)
    力扣300题、354题(最长递增子序列,信封嵌套)
    力扣509题、70题(斐波那契数列、爬楼梯)
    力扣206题、92题、25题(反转链表)
    力扣234题(回文链表)
    力扣239题(单调队列)
    力扣496题、503题(单调栈)
    面试题简答题
  • 原文地址:https://www.cnblogs.com/attila/p/10680295.html
Copyright © 2020-2023  润新知