• FLASK 三剑客 request jinjia2


    Flask Web 框架
    Django 15
    优势 : 组件全 - admin - Model ORM - Forms
    教科书式

    劣势 : 加载所有组件 - 占用资源较高
    重型框架

    Flask 3
    优势 : 轻如鸿毛 扩展性极强 三方组件全

    劣势 : 什么组件都没有
    三方组件全 - 版本兼容问题 导致不稳


    1.Flask 安装 + 启动
    from flask import Flask
    app = Flask(__name__)
    app.run()

    高级启动:
    from flask import Flask
    app = Flask(__name__)

    @app.route("/")
    def home():
    return "Hello World!"

    app.run()


    2.Flask Response
    1.HttpResponse("HelloWorld") "HelloWorld" 返回字符串
    from flask import render_template 默认存放路径 templates
    2.render("模板路径") render_template 返回模板
    from flask import redirect 重定向
    3.redirect("/")

    Flask 中的返回特殊封装 2个
    1.jsonify 转换标准JSON格式
    响应头中加入 Content-type:application/json
    在Flask 1.1.1 版本中 加入了 直接返回字典 可以不再使用jsonify了

    2.send_file 发送文件
    打开并返回文件内容,
    自动识别文件类型,
    响应头中加入Content-type:文件类型
    ps:当浏览器无法识别Content-type时,会下载文件

    3.Flask Request
    假登录
    405 请求方式不被允许 - GET请求可以 POST请求 405 Method Not Allowed
    Form表单 - FormData
    f orm - 表单

    from flask import request 公共对象

    1.request.form 获取FormData中的数据 - Form表单
    2.request.args # 获取URL中的参数
    3.request.files # 获取FormData中的文件数据
    print(request.url) # 获取访问路径
    print(request.method) # 获取请求方式
    print(request.path) # 路由地址 /login
    print(request.values) # Form 和 Args 中的数据
    # 综合获取 X
    print(request.args.get("id")) # 获取URL中的参数
    print(request.args["id"]) # 获取URL中的参数
    print(request.args.to_dict()) # 获取URL中的参数 转换成 字典

    print(request.environ) # 获取请求原始信息
    print(request.base_url) # 获取URL头,不包含参数

    print(request.json) # 毁三观 1 请求头中 Content-type:application/json 数据序列化 request.json
    print(request.data) # 毁三观 2 请求头中 Content-type 不包含 Form or data                                                   #####Content-type   位于 network   all   header

    print(request.headers) # 请求头中的数据



    4.Jinja2
    {{}} 引用 or 执行
    {%%} 逻辑语法 if else for

    5.Flask中的Session 不是三方组件 //Flask-Session
    from flask import session

    session 交由客户端保管机制
    # eyJ1c2VybmFtZSI6IjEyMyJ9.XSVpHA.W0NfiCmW-lsTV0mvQI7mx2mf1Wo
    # .eJyrViotTi3KS8xNVbJSMjQyVtKBCxhiiBhhiBhjiJhgiJhiiJhBRWoBMFYkPg.XSVsaA.9merwNdTg3ZkZrdTumYRG7x8x7Y
    # .eJyrViotTi3KS8xNVbJSMjQyVtKBCxhiiBhhiBhjiJhgiJhiiJhBRWoBMFYkPg.XSVsvg.6OqcN7CR6nrT2BtE-w1kBAr3xPo
    # .eJxNzL0OgCAMBOB36exAoRTjs7jwUzcdNEzGdxckMV1u-e7uhnrJecRdYIG1eqS5pWCB6RccZDGtlQSjIvsRBxtbwZEmN8gZ21czK6JBiamtQhZF_qPAuR-WookH-dQO_WYiPC-8zDp8.XSVtLw.7I-z1bsqiWFln3cipbrVOpEE33g

    反序列化机制 -
    当客户端发起请求 - request 带上 Cookie - Cookie中有session的加密字符串 - Flask 收到Session加密字符串 - 通过secret_key解密session的加密字符串 - 获得 {username:123}

    序列化机制 - 开启session - session["username"] = uname
    先创建一个字典 {username:123} 接下来 通过secret_key + 时间戳 + 签名 加密 形成
    # eyJ1c2VybmFtZSI6IjEyMyJ9.XSVpHA.W0NfiCmW-lsTV0mvQI7mx2mf1Wo session的加密字符串

    代码 

    from flask import Flask, render_template, redirect, jsonify, send_file
    
    app = Flask(__name__)
    
    @app.route("/")
    def home():
        return "Hello World!"
    
    @app.route("/index")
    def index():
        return render_template("index.html")
    
    @app.route("/reback")
    def reback():
        return redirect("/index")
    
    
    @app.route("/json")
    def my_jsonify():
        # return jsonify({"a":1})
        return {"k":"v"}
    
    @app.route("/my_file")
    def my_file():
        return send_file("1.rar")
    
    app.run()







    2

    import os

    from flask import Flask, render_template,request

    app = Flask(__name__)
    # app.config["DEBUG"] = True
    app.debug = True


    @app.route("/login",methods=["POST","GET"])
    def login():
    if request.method == "GET": # 请求方式

    print(request.url) # 获取访问路径
    print(request.method) # 获取请求方式
    print(request.path) # 路由地址 /login
    print(request.values) # 可以获取URL中的参数 也可以获取 FormData中的数据
    # 综合获取 X
    print(request.args.get("id")) # 获取URL中的参数
    print(request.args["id"]) # 获取URL中的参数
    print(request.args.to_dict()) # 获取URL中的参数 转换成 字典

    print(request.environ) # 获取请求原始信息
    print(request.base_url) # 获取URL头,不包含参数

    print(request.json) # 毁三观 1 请求头中 Content-type:application/json 数据序列化 request.json
    print(request.data) # 毁三观 2 请求头中 Content-type 不包含 Form or data

    print(request.headers) # 请求头中的数据




    return render_template("login.html")

    if request.method == "POST":
    print(request.headers)
    print(request.values.to_dict()) # 可以获取URL中的参数
    # print(request.form.to_dict())
    username = request.form.get("username")
    password = request.form["pwd"]
    print(request.form)
    # print(request.json) # 毁三观 1 请求头中 Content-type:application/json 数据序列化 request.json
    # print(request.data) # 毁三观 2 请求头中 Content-type 不包含 Form or data 原始请求体数据

    print(request.files.get("my_file"))
    my_file = request.files.get("my_file")
    # fp = os.path.join("templates",my_file.filename)
    my_file.save(my_file.filename)

    if username == "123" and password == "456":
    return "登录成功"
    else:
    return "登录失败"


    if __name__ == '__main__':
    app.run()





    3
    from flask import Flask,render_template,Markup

    STUDENT = {'name': 'Old', 'age': 38, 'gender': '中'}

    STUDENT_LIST = [
    {'name': 'Old', 'age': 38, 'gender': '中'},
    {'name': 'Boy', 'age': 73, 'gender': '男'},
    {'name': 'EDU', 'age': 84, 'gender': '女'}
    ]

    STUDENT_DICT = {
    1: {'name': 'Old', 'age': 38, 'gender': '中'},
    2: {'name': 'Boy', 'age': 73, 'gender': '男'},
    3: {'name': 'EDU', 'age': 84, 'gender': '女'},
    }


    app = Flask(__name__)
    app.debug = True
    # app.config["DEBUG"] = True

    @app.template_global()
    def ab(a,b):
    return a+b #定义了一个公共函数


    @app.route("/index")
    def index():
    my_in = Markup("<input type='text' name='uname'>")
    return render_template("index.html",
    stu_info=STUDENT,
    stu_list=STUDENT_LIST,
    sd=STUDENT_DICT,m = my_in)




    if __name__ == '__main__':
    app.run("0.0.0.0",9527)




    4

    from datetime import timedelta

    from flask import Flask,session,request,render_template,redirect
    app = Flask(__name__)
    app.secret_key = "#$%^&*#$%^&#$%2213123^&"
    app.debug = True
    app.session_cookie_name = "I am Not Session"
    # app.testing = True
    # app.permanent_session_lifetime = 15

    STUDENT = {'name': 'Old', 'age': 38, 'gender': '中'}

    STUDENT_LIST = [
    {'name': 'Old', 'age': 38, 'gender': '中'},
    {'name': 'Boy', 'age': 73, 'gender': '男'},
    {'name': 'EDU', 'age': 84, 'gender': '女'}
    ]

    STUDENT_DICT = {
    1: {'name': 'Old', 'age': 38, 'gender': '中'},
    2: {'name': 'Boy', 'age': 73, 'gender': '男'},
    3: {'name': 'EDU', 'age': 84, 'gender': '女'},
    }


    @app.route("/login",methods=["POST","GET"])
    def login():
    if request.method == "GET":
    return render_template("login.html")

    uname = request.form.get("username")
    pwd = request.form.get("pwd")

    if uname == "123" and pwd == "123":
    session["username"] = "先帝"
    session["12e1"] = "创业"
    session["asdfas"] = "未半"
    session["username3"] = "挂了"
    session["username4"] = "此城"
    session["username5"] = "益州"
    session["username6"] = "疲弊"
    return "200 OK"
    else:
    return "失败"


    @app.route("/detail")
    def detail():
    # session["u"]
    if session.get("username"):
    return render_template("index.html",
    stu_info=STUDENT,
    stu_list=STUDENT_LIST,
    sd=STUDENT_DICT)
    else:
    return redirect("/login")


    if __name__ == '__main__':
    app.run("0.0.0.0",9527)
     
    login
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Title</title>
    </head>
    <body>
    <form action="/login?id=1&ids=2" method="post" enctype="multipart/form-data">
      用户名:<input type="text" name="username">
      密码:<input type="password" name="pwd">
      <input type="file" name="my_file">
      <input type="submit" value="登录">
    </form>
    </body>
    </html>
    
    
    
    
    index
    
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Title</title>
    </head>
    <body>
    {{ stu_info }}
    
    <table border="1px">
      <tr>
        <td>name</td>
        <td>age</td>
        <td>gender</td>
      </tr>
      <tr>
        <td>{{ stu_info.name }}</td>
        <td>{{ stu_info.get("age") }}</td>
        <td>{{ stu_info["gender"] }}</td>
      </tr>
    </table>
    
    {{ stu_list }}
    <table border="1px">
      <tr>
        <td>name</td>
        <td>age</td>
        <td>gender</td>
      </tr>
      {% for foo in stu_list %}
        <tr>
          <td>{{ foo.name }}</td>
          <td>{{ foo.get("age") }}</td>
          <td>{% if  foo["gender"] != "男" and foo["gender"] != "女" %}
            女
            {% else %}
    
            {{ foo["gender"] }}
          {% endif %}
    
          </td>
        </tr>
      {% endfor %}
    </table>
    {{ sd }}
    <table border="1px">
      <tr>
        <td>id</td>
        <td>name</td>
        <td>age</td>
        <td>gender</td>
      </tr>
      {% for id,s in sd.items() %}     for 循环
        <tr>
          <td>{{ id }}</td>
          <td>{{ s.name }}</td>
          <td>{{ s.get("age") }}</td>
          <td>{{ s["gender"] }}</td>                            #django里只有s.    jinjia2里  三种方法都可以
        </tr>
      {% endfor %}
    </table>
    
    {#<center>{{ absum(1,2) }}</center>#}     /*{{}}执行函数*/
    {#<center>{{ ab(2,2) }}</center>#}
    {##}
    {#{% macro my_input(na,ty) %}#}  #macro  宏指令  相当于 def 
    {#  <input type="{{ ty }}" name="{{ na }}">#}
    {#{% endmacro %}#}
    {##}
    {#{{ my_input("uname","text") }}#}
    {#{{ m }}#}
    </body>
    </html>
    

     jinjia2语言模板

    {{    }}引用接收后端传过来的数据    or    执行函数

    {%     %} 逻辑   for  if  等等 要  跟着 {%    end(for/if....)   %}

  • 相关阅读:
    JVM调优
    【转】中文分词之HMM模型详解
    xwiki enterprise 8.4.5使用https步骤
    dubbo和shiro的整合,在服务端做权限验证
    电商课题:分布式锁
    Export large data from Gridview and Datareader to an Excel file using C#
    sap学习笔记
    git拉取远程分支并创建本地分支
    Echarts 解决饼图文字过长重叠的问题
    用localStorage坚持Vuex状态----vuex-persistedstate
  • 原文地址:https://www.cnblogs.com/qj696/p/11164801.html
Copyright © 2020-2023  润新知