zoukankan      html  css  js  c++  java
  • Flask中的http请求与响应

    参考:《Flask web开发》

    Flask 上下文全局变量

    Flask使用上下文临时将某些对象变为全局可访问。在Flask中有两种上下文:应用上下文请求上下文

    变量名 上下文 说明
    current_app 应用上下文 当前应用的应用实例
    g 应用上下文 处理请求时用作临时存储的对象,每次请求都会重设这个对象
    request 请求上下文 请求对象,封装了客户端发出的HTTP请求中的内容
    session 请求上下文 用户会话,值为一个字典,存储请求之间需要“记住”的值

    请求对象

    Flask通过上下文变量request对外开放请求对象,这个对象包含了客户端发送的HTTP请求的全部信息。常用的属性和方法有:

    属性或方法 说明
    form 一个字典,存储请求提交的所有表单字段(post请求)
    args 一个字典,存储通过URL查询字符串传递的所有参数(get请求)
    values 一个字典,form和args的合集
    cookies 一个字典,存储请求的所有cookie
    headers 一个字典,存储请求的所有HTTP头部
    files 一个字典,存储请求上传的所有文件
    get_data() 返回请求主体缓冲的数据
    get_json() 返回一个字典,包含解析请求主体后得到的JSON
    blueprint 处理请求的Flask蓝本的名称
    endpoint 处理请求的端点的名称,Flask把视图函数的名称用作路由端点的名称
    method HTTP请求方法,如GET或POST
    scheme URL方法(http或https)
    ts_secure 通过安全的连接(https)发送请求时返回True(注:原书中此为方法,错误)
    host 请求定义的主机名,可包含端口号
    path URL的路径部分
    query_string URL的查询字符串部分,返回原始二进制值
    full_path URL的路径和查询字符串部分
    url 客户端请求的完整URL
    base_url 同url, 但没有查询字符串部分
    remote_addr 客户端的IP地址
    environ 请求的原始WSGI环境字典

    代码演示

    from flask import Flask, request
    
    app = Flask(__name__)
    
    
    @app.route('/index/', methods=['GET', 'POST'])
    def index():
        if request.method == 'POST':  # post参数{'name': 'flask'}
            print(request.form.get('name'))  # flask
            return 'post succeed'
        elif request.method == 'GET':   # 以url http://127.0.0.1:5000/index/?name=flask 为例
            print(request.args.get('name'))  # flask
            print(request.values.get('name'))  # flask
            print(request.cookies)           # {}
            print(request.headers.get('User-Agent'))  # Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
            print(request.get_data())        # b''
            print(request.get_json())        # None
            print(request.blueprint)         # None
            print(request.endpoint)          # index
            print(request.scheme)            # http
            print(request.is_secure)         # False
            print(request.host)              # 127.0.0.1:5000
            print(request.path)              # /index/
            print(request.query_string)      # b'name=flask'
            print(request.full_path)         # /index/?name=flask
            print(request.url)               # http://127.0.0.1:5000/index/?name=flask
            print(request.base_url)          # http://127.0.0.1:5000/index/
            print(request.remote_addr)       # 127.0.0.1
            print(request.environ)
            return 'get succeed'
    
    
    if __name__ == '__main__':
        app.run(debug=True)
    

    响应对象

    常见的响应:

    return  "字符串"
    return render_template # 返回模板
    return redirect()
    

    在视图函数中如果不想返回几个值组成的元组,可以使用make_response() 函数返回一个响应对象。

    响应对象常见的属性和方法有:

    属性或方法 说明
    status_code HTTP数字状态码
    headers 一个类似字典的对象,包含随响应发送的所有头部
    set_cookie() 为响应添加一个cookie
    delete_cookie() 删除一个cookie
    content_length 响应主体的长度
    content_type 响应主体的媒体类型
    set_data() 使用字符串或字节值设定响应
    get_data() 获取响应主体

    以及一个特殊类型,重定向。

    from flask import Flask, request, make_response
    
    app = Flask(__name__)
    
    
    @app.route('/index/')
    def index():
        data = {
            'msg': 'this document carries a cookie!'
        }
        response = make_response(data)
        response.set_cookie('answer', '42')
        response.headers['Content-Length'] = 100  # 默认为返回数据长度,可修改
        response.headers['token'] = 'asd343asd'  # 添加编辑header信息
        print(request.cookies.get('answer'))     # 第二次请求时会返回 42
        return response
    
    
    if __name__ == '__main__':
        app.run(debug=True)
    
  • 相关阅读:
    主流浏览器内核概览
    图片圆角边框自适应宽高(深夜原创)
    <程序员节>
    谁说Float菜单不可以水平居中
    如何做好一份前端工程师的简历?
    重温textjustify:interideograph
    Firefox 4 beta 1发布——前端开发者须知
    让PHP程序永远在后台运行
    如何让Linux后台运行命令或php
    PHP执行后台程序 argv
  • 原文地址:https://www.cnblogs.com/ingen42/p/11886447.html
Copyright © 2011-2022 走看看