request
服务器在接收到客户端请求后,会自动创建Request对象,由Flask自动创建,Request对象不可修改。
from flask import Flask
from flask import request
app = Flask(__name__)
'''
获取当前请求的内容
1 先要导入request
2 直接用request.方法,属性
'''
@app.route('/login.html', methods=['GET', "POST"])
def login():
# 请求相关信息
# request.method 提交的方法
print("request.method",request.method)
# request.args get请求提及的数据
print("request.args", request.args)
# request.form post请求提交的数据
# request.values post和get提交的数据总和
# request.cookies 客户端所带的cookie
# request.headers 请求头
# request.path 不带域名,请求路径
# request.full_path 不带域名,带参数的请求路径
# request.script_root
# request.url 带域名带参数的请求路径
# request.base_url 带域名请求路径
# request.url_root 域名
# request.host_url 域名
# request.host 127.0.0.1:500
# request.files
# obj = request.files['the_file_name']
# obj.save('/var/www/uploads/' + secure_filename(f.filename))
return "字符串"
if __name__ == '__main__':
app.run()
response
from flask import Flask
from flask import render_template, redirect, make_response, jsonify
app = Flask(__name__)
@app.route('/login.html', methods=['GET', "POST"])
def login():
# 响应相关信息
# return "字符串" # 字符串
# return render_template('html模板路径',**{}) # 渲染模板
# return redirect('/index.html') # 重定向
#return jsonify({'k1':'v1'}) # 返回json数据
"""
返回的时候,如果需要设置额外的响应参数,比如cookie,heard
1 response=make_response(四剑客)
2 response.设置属性=“属性值”
3 return response
"""
# response = make_response(render_template('index.html'))
# response是flask.wrappers.Response类型
# response.delete_cookie('key') # 删除cookies
# response.set_cookie('key', 'value') # 设置cookies
# response.headers['X-Something'] = 'A value' # 设置请求头
# return response
response1=make_response(render_template('rr.html'))
#response1.set_cookie('key_sss', 'valuessbbsd')
# response1.delete_cookie('key_sss')
response1.headers['sb'] = 'asdas'
return response1
if __name__ == '__main__':
app.run()
---------------------------------------------------------------------------------------
request 使用实例
# coding:utf-8 from flask import Flask, request app = Flask(__name__) # 接口 api # 127.0.0.1:5000/index?city=chongqing&country=china @app.route("/index", methods=["GET", "POST"]) def index(): # request中包含了前端发送过来的所有请求数据 # form和data是用来提取请求体数据 #当前端通过存表单提交的时候content-type:urlencode的时候,所有数据已经被flask封装到了form里面。 #如果时候form-data多类型数据,可以通过request.data获取 # 通过requset.form可以直接提取请求体中的表单格式的数据, 是一个类字典的对象 # 通过get方法只能拿到多个同名参数的第一个 name = request.form.get("name") age = request.form.get("age") name_li = request.form.getlist("name") # 如果是请求体的数据不是表单格式的(如json格式),可以通过request.data获取 print("request.data: %s" % request.data) # args是用来提取url中的参数(查询字符串) city = request.args.get("city") return "hello name=%s, age=%s, city=%s, name_li=%s" % (name, age, city, name_li) @app.route("/upload", methods=["POST"]) def upload(): """接受前端传送过来的文件""" #如果是文件类型的,可以通过 request.files获取文件 file_obj = request.files.get("pic") if file_obj is None: # 表示没有发送文件 return "未上传文件" #方式一(常规) # 将文件保存到本地 # # 1. 创建一个文件 # f = open("./demo.png", "wb") # # 2. 向文件写内容 # data = file_obj.read() # f.write(data) # # 3. 关闭文件 # f.close() #方式二(推荐) # 直接使用上传的文件对象保存 file_obj.save("./demo1.png") return "上传成功" # with open打开文件自动可以关闭流 with open("./1.txt", "wb") as f: f.write("hello flask") @app.route("/login", methods=["GET"]) def login(): # name = request.form.get() # pwd = request.form.get() name = "" pwd = "" if name != "11111" or pwd != "admin": # 使用abort函数可以立即终止视图函数的执行 # 并可以返回给前端特定的信息 # 1 传递状态码信息, 必须是标准的http状态码 abort(404) # #2. 传递响应体信息 # resp = Response("login failed") # abort(resp) return "login success" # 定义错误处理的方法 @app.errorhandler(404) def handle_404_error(err): """自定义的处理错误方法""" # 这个函数的返回值会是前端用户看到的最终结果 return u"出现了404错误, 错误信息:%s" % err if __name__ == '__main__': app.run(debug=True)
-------------------------------------------------------------------------------
response实例
# coding:utf-8
from flask import Flask, request, abort, Response, make_response
app = Flask(__name__)
#比较常规的处理response方式
@app.route("/index")
def index():
# 1 使用元祖,返回自定义的响应信息
# 响应体 状态码 响应头
# return "index page", 400, [("aimaile", "1"), ("City", "c1")]
# return "index page", 400, {"aimaile": "2", "City1": "cq"}
# return "index page", 666, {"aimaile": "3", "City1": "cq"}
# return "index page", "666 aimaile status", {"aimaile": "python1", "City1": "cq"}
# return "index page", "666 aimaile status"
# 2 使用make_response 来构造响应信息
resp = make_response("index page 2")
resp.status = "999 itcast" # 设置状态码
resp.headers["city"] = "cq " # 设置响应头
return resp
# 目前我用得最多的是返回json。
#1、终端和平台交互现在一般都是json。
#2、目前很流行前后分离,前端用vue,前后交互也用json,后台只管数据处理,前端只管渲染数据
@app.route("/list")
def loveCity():
# json就是字符串
data = {
"city": "cq",
"old": 11
}
# json.dumps(字典) 将python的字典转换为json字符串
# json.loads(字符串) 将字符串转换为python中的字典
# json_str = json.dumps(data)
# return json_str, 200, {"Content-Type": "application/json"}
# jsonify帮助转为json数据,并设置响应头 Content-Type 为application/json
# return jsonify(data)
return jsonify(city="cq", country="china")
if __name__ == '__main__':
app.run(debug=True)