• flask2 未整理


    day111 flask第一天
    #几个webk框架比较:

    django 大而全 里面的组件比较多 e.g ModelForm/admin/ORM/session.很多组件我们不用也要加载. 浪费资源.

    flask 优点 小而精
    只有一个内置的session组件 其他什么都没有了. 但是第三方组件很全 其他组件都在第三方组件中
    缺点 稳定性相对django较差 依赖第三方组件 官方组件更新之后 第三方组件必须更新一致 否则出现不兼容

    tornado 比flask更小 第三方组件也不全 但优点是 原生websocket 异步IO 非阻塞 (就是多任务 任务永远不会停)

    Sanic 基于flask和tornado产生的 目前很火(但是学校老师都不精所以不讲)


    #Python 现阶段三大主流Web框架 Django Tornado Flask 对比
    1.Django 主要特点是大而全,集成了很多组件,例如: Models Admin Form 等等, 不管你用得到用不到,反正它全都有,属于全能型框架

    2.Tornado 主要特点是原生异步非阻塞,在IO密集型应用和多任务处理上占据绝对性的优势,属于专注型框架

    3.Flask 主要特点小而轻,原生组件几乎为0, 三方提供的组件请参考Django 非常全面,属于短小精悍型框架

    Django 通常用于大型Web应用由于内置组件足够强大所以使用Django开发可以一气呵成
    优点是大而全,缺点也就暴露出来了,这么多的资源一次性全部加载,肯定会造成一部分的资源浪费

    Tornado 通常用于API后端应用,游戏服务后台,其内部实现的异步非阻塞真是稳得一批
    优点是异步,缺点是干净,连个Session都不支持

    Flask 通常应用于小型应用和快速构建应用,其强大的三方库,足以支撑一个大型的Web应用
    优点是精悍简单,缺点是稳定性相对django较差 依赖第三方组件 官方组件更新之后 第三方组件必须更新一致 否则出现不兼容


    #安装flask
    pip install Flask
    或在pycharm--settings---project--project interpreter-->点加号,搜索flask,安装


    #第一个flask程序

    from flask import Flask,redirect,render_template
    app= Flask(__name__) # __name__是文件的所有属性, 锁定项目目录,不会让项目目录变化

    @app.route("/")
    def login():
    return "hello s15"

    app.run("0.0.0.0",5000,debug=True) #debug=True 代码修改后自动重启 不用我们手动重启


    每个框架中都有处理请求的机制(request),但是每个框架的处理方式和机制是不同的
    @app.route("/req",methods=["POST"]) : # 代表这个url地址只允许 POST 请求,是个列表也就是意味着可以允许多重请求方式,例如GET之类的
    登录页面:发送用户名alex 密码123的时候
    request.form # ImmutableMultiDict([('user', 'alex'), ('pwd', '123')])
    # ImmutableMultiDict 它看起来像是的Dict 就用Dict的方法取值试一下吧
    request.form["user"] # alex
    request.form.get("pwd")) # 123
    list(request.form.keys()) # ['user', 'pwd']
    request.args 与 request.form 的区别就是:

    request.args 是获取url中的参数

    request.form 是获取form表单中的参数
    request.values 获取所有参数


    #Response三剑客:
    djang中 flask中
    返回字符串 return HttpResponse('XXX') return "Hello World" 返回字符串至客户端

    返回模板 return render('xxx') from flask import render_template
    return render_template("login.html")

    重定向 redirect('xx') from flask import redirect
    return redirect("/login")



    from flask import jsonify
    ...
    retrun jsonify({name:111}) # jsonify返回json字符串
    # 会在响应头中加Content-Type:application/json. 会自动将字符串反序列化成object??
    # 如果是json.dumps({name:alex}) Content-Type仍然是字符串???


    from flask import send_file
    ....
    return send_file(path) #打开文件并返回文件内容(自动识别文件格式)
    #打开文件并返回文件内容 会自动识别文件类型 修改contne-type


    #falsk 中的 request
    flask中request是公共变量
    request.method请求方式有8种,常用的有4种: get post delete put

    from flask import request
    request.method # 请求方式
    request.form # 存放FormData中的数据 前端表单类的数据都是formdata to_dict将formdata序列化成字典
    request.args # 获取URL中的数据 to_dict 序列化成字典
    request.url # 访问的完整路径
    request.path # 路由地址
    request.host # 主机地址
    request.values # 获取 FormData 和 URL中的数据 不要用to_dict可能会有坑,因为2个类型的数据的key有重复会覆盖
    request.json # 如果提交时请求头的Content-Type:是application/json,就将数据序列化放在request.json中字典操作
    request.data # 如果提交时请求头中的Content-Type无法被识别 放的是请求体中的原始数据 是bytes类型的原始数据
    request.cookies # 获取Cookie中的数据
    request.headers # 获取请求头
    request.files # 前端提交文件用request.files获取文件 序列化文件存储 save(路径) 将文件保存到本地


    # 模板语言Jinja2
    {{ }} 变量相关 执行函数
    {% %} 逻辑相关
    |safe 和 Markup 安全标签字符串
    @app.template_global()
    @app.template_filter()

    {% macro create_input(na,ty) %}
    {{ na }} : <input type="{{ ty }}" name="{{ na }}">
    {% endmacro %}
    {{ create_input("username","text") }}


    #Flask 中的 Session
    #session和request一样也是公共变量
    存在cookie中的键值对 为了节省flask的开销 相对安全 拿安全换开销

    app.secret_key = "加密字符串" # 用于序列化和反序列化 session信息

    由于Flask中默认Session 存放位置 - 客户端的Cookies中
    所以Session需要加密 用到 secret_key
    请求进入视图函数 带上cookie 将Session从cookie序列化出来 通过secret_key 反序列化成字典
    Flask-Session


    flask day112-114没看


    #===============================================
    from flask import Flask, request, render_template, redirect, jsonify,session

    app = Flask(__name__, #flask实例化配置
    template_folder="templates", #模板目录
    static_folder="static", #静态文件目录
    static_url_path="/static")


    app.config["DEBUG"] = True #实例的配置
    app.secret_key = "!@#$%^&*()" #使用原生session要加secret_key ,用来序列化session字符串.可以用app.sercert_key,也可以app.config[['SECRET_KEY']=xxx


    @app.route("/<name>", methods=["GET", "POST"]) #路由参数和允许的方法
    def index(name):

    session["user"] = name #使用session 原生session放在cookies中

    request.form # 取formdata
    request.args # 取url
    request.method # 请求方式
    request.files # formdata中的文件 序列化到files
    request.json # content-type:application/json
    request.data # content-type:未知 存原始的数据 是bytes

    return ""
    return render_tempalte()
    return redirect("/")

    return jsonify({"name": "123"}) # Content-type:application/json
    return send_file(文件) # 打开并返回文件内容

    from bp import bp
    app.register_blueprint(bp) #注册蓝图

    if __name__ == '__main__':

    app.run() # run本质执行werkzeug中的run_simple(), 执行app.__call__, 再执行app.wsgi_app 开始进入上下文,
    app.__call__
    app.wsgi_app


    蓝图:
    from flask import Blueprint
    bp = Blueprint("bp",__name__,
    static_url_path="/sta",
    static_folder="sta",
    template_folder="bptemp",
    url_prefix="/my_bp") #所有访问这个蓝图的地址都要加这个前缀

    @bp.route("/bp")
    def bp_func():
    return "123"

  • 相关阅读:
    二分法查找算法
    [Java]事件驱动程序设计
    spring 事件驱动模型简介
    事件驱动模型实例详解(Java篇)
    协程
    事件驱动模型的简单Java实现
    负载均衡技术(一)———负载均衡技术介绍
    知物由学 | 未来50年网络安全行业发展愿景
    知物由学 | 如何从勒索软件的攻击中全身而退
    “网易大数据讲堂第一期:数说”直播活动资料:课程回放收看及PPT下载
  • 原文地址:https://www.cnblogs.com/dingyunfeng/p/12866549.html
Copyright © 2020-2023  润新知