flask请求响应

Do better / 2023-08-16 / 原文

1 请求

所有的web请求:都有请求对象和响应对象 (java,go,python)
每个web框架都会有一个请求框架都会有一个响应框架
django:request(每个请求都有一个request)
flask:request 全局的 但也是每个请求一个request 新手三件套

eg:

from flask import Flask,render_template,request
app = Flask(__name__)
app.debug = True

@app.route('/',methods=['GET','POST'])
def index():
    # print(request.path)
    # print(request.full_path)
    print(request.files) # 打印出来的结果是:ImmutableMultiDict([('file', <FileStorage: '1516626930841140.jpeg' ('image/jpeg')>)])
    
    # 保存文件流程
    print(type(request.files.get('file')))
    with open('test.zip','wb') as f:
        for line in request.files.get('file'):
            f.write(line)
    # from werkzeug.datastructures.file_storage import FileStorage

    test()
    return 'index'

@app.route('/home')
def home():
    print(request.path)
    test()
    return 'home'

def test():
    print(request.args)  # get请求的参数

if __name__ == '__main__':
    app.run()
    
附上请求的各类方法:
'''
   # 请求相关信息
       # request.method  请求的方法
       # request.args  get请求提交的数据
       # request.form   post请求提交的数据
       # request.values  post和get提交的数据总和
       # request.cookies  客户端所带的cookie
       # request.headers  请求头
       # request.path     不带域名,请求路径
       # request.full_path  不带域名,带参数的请求路径
       # request.url           带域名带参数的请求路径
       # request.base_url		带域名请求路径
       # request.url_root      域名
       # request.host_url		域名
       # request.host			服务端地址
       # request.files
       # obj = request.files['the_file_name']
       # obj.save('/var/www/uploads/' + secure_filename(f.filename))
'''

 2 响应

#flask的响应 四件套
1 直接返回字符串
2 返回模版:render_template
3 返回重定向:redirect,
4 返回json格式:jsonify

返回响应的示例

@app.route('/',methods=['GET','POST'])
def index():
    # return jsonify([{'name':'jack','age':20}])
    # return jsonify([{'code':100,'msg':'成功'}])


    res = make_response('index') # res是响应对象
    # 往响应头写数据
    res.headers['abc'] = 'abc'
    # 往cookie写数据
    res.set_cookie('yyy','xxx',path='/')
    # 删除cookie
    res.delete_cookie('key')
    return res

def test():
    print(request.args)  # get请求的参数

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