zoukankan      html  css  js  c++  java
  • flask的基础1

    1.python 现阶段三大主流web框架Django Tornado Flask的对比

    1.Django 主要特点是大而全,集成了很多组件,例如: Models Admin Form 等等, 不管你用得到用不到,反正它全都有,属于全能型框架

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

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

    Django 通常用于大型Web应用由于内置组件足够强大所以使用Django开发可以一气呵成

    Tornado 通常用于API后端应用,游戏服务后台,其内部实现的异步非阻塞真是稳得一批

    Flask 通常应用于小型应用和快速构建应用,其强大的三方库,足以支撑一个大型的Web应用

    Django 优点是大而全,缺点也就暴露出来了,这么多的资源一次性全部加载,肯定会造成一部分的资源浪费

    Tornado 优点是异步,缺点是干净,连个Session都不支持

    Flask 优点是精悍简单,缺点是稳定性较差

    2.简单的运行一个flask页面

    from flask import Flask
    
    app = Flask(name)
    
    @app.route("/")
    
    def index():
    
        return "Hello World"
    
    app.run(debug=True)

    3.Response的三元素

    HttpResponse:return “Hello World” 直接返回字符串

    from flask import render_templaterender 

    return :render_template("login.html")与Django中的 render 使用一致 返回模板由浏览器渲染

    from flask import redirectredirect

    return :redirect("/login") # 302跳转,重定向URL

    Flask独有的

    1.from flask import jsonify

    retrun jsonify({name:111}) # 返回json标准的字符串

    Content-Type:application/json

    app.config["JSON_AS_ASCII"] = False # 解决jsonify不能返回汉字问题 ==json.dumps(d, ensure_ascii=False)

    2.from flask import send_file

    return send_file(path)  #send_file会打开文件并返回文件内容(自动识别文件格式)

    4.flask中的request

    @app.route("/login", methods=["POST", "GET"]) # 默认的请求方式只有get,在加上menthods参数后会根据添加的请求方式来处理,可以是元组或列表形式

    request.method # 请求方式
    
    request.form # 存放FormData中的数据 to_dict 序列化成字典
    
    request.args # 获取URL中的数据 to_dict 序列化成字典
    
    request.url # 访问的完整路径
    
    request.path # 路由地址
    
    request.full_path#带参数的路由地址
    
    request.host # 主机地址
    
    request.values # 获取 FormData and URL中的数据 不要用to_dict
    
    request.json  # 如果提交时请求头中的Content-Type:application/json 字典操作
    
    request.data  # 如果提交时请求头中的Content-Type 无法被识别 将请求体中的原始数据存放 byte
    
    request.cookies # 获取Cookie中的数据
    
    request.headers # 获取请求头
    
    request.files # 序列化文件存储 save()
    my_file = request.files.get("my_file") #获取到上传的文件
    my_file.save(my_file.filename) #将文件保存在当前环境,最少指定一个文件名

    5.jinja2

    {{}} 引用变量 执行函数

    {%%} 逻辑代码

    tag = "<input type='text' name='username'>"
    tag = Markup(tag) # 转变成安全标签字符串 #也可以在前端用 | safe
    @app.template_global() #全局的函数
    def func(a, b):
        return a + b
    
    {{ func(5,6) }}
    
    @app.template_filter() #
    def fil(a, b, c):
        return a+b+c
    
    {{ 1 | fil(1,2) }}
    #也可以在前端定义函数并调用
    {% macro create_input(na,ty) %}
      {{ na }}: <input type="{{ ty }}" name="{{ na }}">
    {% endmacro %}
    
    {{ create_input("username", "text") }}

    6.flask中的session

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

    由于Flask中默认Session 存放位置 - 客户端的Cookies中

    所以Session需要加密 用到 secret_key

    请求进入视图函数 带上cookie 将Session从cookie序列化出来 通过secret_key 反序列化成字典

  • 相关阅读:
    php 三级连动及 php+ajax的调试方法
    ajax传值 乱码问题
    ajax传值给php
    php连接mssql pdo
    语法正确的情况下报错的原因
    Mina传递对象
    Mina小例子
    基于MINA构建简单高性能的NIO应用
    点与不规则图形关系判断
    Postman----基础使用篇(没有接口文档的情况下如何着手做接口测试)
  • 原文地址:https://www.cnblogs.com/qq849784670/p/10235614.html
Copyright © 2011-2022 走看看