• 1.3 Flask_request对象url反向解析


    一、 request对象

    使用:  from flask import request
    
    • 1
    @app.route('/register2', methods=['get', 'post'])
    def register2(): 
        if request.method == "POST":
            username = request.form.get("username")
            password = request.form.get("password")
            re_password = request.form.get("repassword")
            if password == re_password:
                return "注册成功"
            else:
                return "两次密码不一致"
        else:
            # print(request.args)
            return "注册成功,用户名称是:%s, 用户地址是:%s,结果是: %s" % (
                request.args.get('username'), request.args.get('address'), str(request.args))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    二、 url_for路径反向解析

    1、 路径反向解析:url_for

       endpoint : url的函数名称
       value: url的可变参数
    
    • 1
    • 2

    在这里插入图片描述

    2、 redirect 与url_for结合使用

       redirect("/")替换成: redirect(url_for("index"))
       总结: 视图函数的返回值response响应
       1) str ---自动转成response对象
       2) dict: json对象
       3) response对象: response对象
       4) make_response对象: response对象
       5) redirect()  重定向--状态码302
       6) render_tempate() 模板渲染 + 模板
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3、url_for的基本使用

       ”url_for“第一个参数,是视图函数的名字的字符串,后面的参数就是传递给’url‘,如果传递的参数之前在’url‘中定义,
    那么这个参数就会被当成”path“的形式给”url“,。 如果这个参数之前没有在’url‘中定义,那么将变成查询字符串的形式放在’url‘中
     url_for(endpoint, **value)
    
    • 1
    • 2
    • 3

    4、 url链接和加载静态文件

    1) 语法: url_for('static', filename='路径')
    2) 静态文件: flask会从static文件加中开始寻找,所以不需要再写static这个路径
    3) 可以在模板中加载:css/js/image文件
     
     
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5、 为什么需要url_for

    - 更方便的获取url, 如果url函数名被修改了,也不会到处去修改
    -  ’url_for‘会自动的处理特殊字符,不需要手动处理
    
    • 1
    • 2

    1、 render_template模块

    from flask import render_template
    模板的语法: 
       - 在模板中获取view中传递的变量值:{{变量值ket}}
       - render_template(”模板名称“,key1=value1,key2=value2)
    举例:
        return render_template("register.html",name=name,age=age)
        1) 前端用{{}}接收变量
        2) 如果驶入函数没有传递变量,则前端莫瑞诺以空白字符串填充
        3) render_template与米板语言结合
          --- {{list.0}} 同list[0]     {{dict.key}} 同{{dict.get(key)}}    {{girl.name}} 同 {{对象.属性}}
          --- 控制块 {% if % } {% endif %}
                    {% for % } {% endfor if %}
    模板语法中的过滤器:
       {{变量名}过滤器(*agrgs)}}  / {{变量名|过滤器}},常见过滤器:
       1) safe 禁用
       2) captalize : 单词首字母大写 {{n1|capitalize}}
       3) lower &upper : 大小写转换
       4)title: 一句话中的每个单词首字母大写 
       5) reverse: 翻转
      7) truncate: 字符串截断
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    2、 redirect重定向

      from werkzeug.utils import redirect
      如果使用JSON函数,则需要导入json库: import json   
          json.dumps : 将Python对象编码成Json字符串
          json.loads  : 将已编码的JSON字符串解码为Python对象
      重定向: 网络请求被重新定个方向转到其它位置redirect("location", code=302,response=None):
           1) location(str) ---- 响应应该重定向到的位置
           2)  code(int) --- 重定向状态代码,默认302
           3)  Response(class) ----在实例化响应时使用的Response类
     redirect有2次响应:
           1)  302状态码 + location
           2) 返回location请求的地址内容
       注明: redirect本身是不能像render_template那样来传递参数
    
     如果要传递的参数只是像string,int这样的数据,可以用u'r'l_for来作为location参数,而url_for是可以传递这些简单数据
     redirect(url_for())传递参数方法
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    from flask import Flask, Response, render_template, request, url_for, redirect
    
    app = Flask(__name__)
    app.config['DEBUG'] = True
    app.config["ENV"] = "development"
    
    
    @app.route("/index", endpoint="home")
    def index():
        return "这是首页"
    
    
    @app.route("/show1")
    def show1():
        girls = {"nv1", "nv2", 'nv3', 'nv4'}
        users = [
            {"username": "阿朱001", "password": "123qwe1231", "re_password": "123qwe1231", "phone": "11111"},
            {"username": "阿朱002", "password": "123qwe1232", "re_password": "123qwe1232", "phone": "22222"},
            {"username": "阿朱003", "password": "123qwe1233", "re_password": "123qwe1233", "phone": "33333"},
            {"username": "阿朱004", "password": "123qwe1234", "re_password": "123qwe1234", "phone": "44444"},
            {"username": "阿朱005", "password": "123qwe1235", "re_password": "123qwe1235", "phone": "55555"}
        ]
        return render_template("show_list.html", girls=girls, users=users)
    
    
    @app.route("/users//")
    def default_key(pageNo=0, pageSize=20):
        if pageNo == 0:
            return f"获取第{pageNo}页数据,每页条数:{pageSize}"
        else:
            # 将show1函数以字符串方式传到url_for里边
            # url_for第一个参数是视图函数名/视图函数endpoint----可以理解为: endpoint是视图函数的别名
            url_for('show1')
            return "show1"
    
    
    @app.route("/list_a//")
    def list_A(pageNo=0, pageSize=20):
        # 重定向后, 结果显示的就是目标路由对应视图函数的内容
        # return redirect(url_for('index', pageNo=pageNo, pageSize=pageSize))  # 视图函数名
        # return redirect(url_for('home', pageNo=pageNo, pageSize=pageSize))   # 视图函数别名:endpoint
        return redirect(url_for('show1', pageNo=pageNo, pageSize=pageSize))
    
    
    # 通过路由接收参数
    # 这里制定了接收参数的类型,不符合会报错
    # 可以将string改成path,这样username就会被当成路径来接收,也就是
    @app.route('/lists/?/?', methods=['GET', 'POST'])
    def lists_redirect(pageNo=0, pageSize=20):
        return pageNo, pageSize
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    在这里插入图片描述
    以上基本都是对于get请求定义的说明,如果post/delete/put请求接口body不为空, get请求param不为空,该如何提取数据。看如下:postman接口调试截图+代码对比

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    WebAPI中使用WebService后发布注意要点
    ✪✪✪宁波国家实验室认可✪✪✪
    大数据面试题之MapReduce(1)
    性能压测工具 —— wrk
    Linux进阶-用户管理与文件权限
    【Django-Docker】Sqlite3.db读取权限不够-20220803
    k8s day08
    C语言实现八大排序
    Canvas变形
    css 绘制 上,下,右,左箭头
  • 原文地址:https://blog.csdn.net/weixin_41256550/article/details/127458844