标签:保留 link ajax 关闭 headers 结束 查询 客户端浏览器 入参
文档: http://docs.jinkan.org/docs/flask/api.html#flask.request
request:flask中代表当前请求的 request 对象
作用:在视图函数中取出本次请求数据
导入:from flask import request
代码位置:
代理类 from flask.app import Request,
源码类:from werkzeug.wrappers.Request
父类:from werkzeug.wrappers.base_request
常用的属性如下:
属性 | 说明 | 类型 |
---|---|---|
data | 记录请求体的数据,并转换为字符串 只要是通过其他属性无法识别转换的请求体数据 最终都是保留到data属性中 例如:有些公司开发小程序,原生IOS或者安卓,这一类客户端有时候发送过来的数据就不一样是普通的表单,查询字符串或ajax | bytes类型 |
form | 记录请求中的html表单数据 | MultiDict |
args | 记录请求中的查询字符串,也可以是query_string | MultiDict |
cookies | 记录请求中的cookie信息 | Dict |
headers | 记录请求中的请求头 | EnvironHeaders |
method | 记录请求使用的HTTP方法 | GET/POST |
url | 记录请求的URL地址 | string |
files | 记录请求上传的文件列表 | * |
json | 记录ajax请求的json数据 | json |
获取请求中各项参数
from flask import Flask,request # 初始化 app = Flask(import_name=__name__) # 编写路由视图 @app.route(rule=‘/‘) def index(): return "<h1>hello world!</h1>" """== 获取查询字符串 ==""" @app.route(rule="/args",methods=["post","get"]) def args(): print(request.args) # 获取查询字符串 """ 请求地址: http://127.0.0.1:5000/args?name=xiaoming&password=123&lve=swimming&lve=shopping 打印效果: ImmutableMultiDict([(‘name‘, ‘xiaoming‘), (‘password‘, ‘123‘)]) ImmutableMultiDict是一个由flask封装的字典类,在字典的基础上,提供了一些其他的方法而已。 格式: ImmutableMultiDict([(‘键‘, ‘值‘), (‘键‘, ‘值‘)]) 字典本身不支持同名键的,ImmutableMultiDict类解决了键同名问题 操作ImmutableMultiDict,完全可以操作字典操作,同时还提供了get,getlist方法,获取指定键的1个值或多个值 """ print(request.args["name"]) # xiaoming print(request.args.get("name")) # xiaoming print(request.args.getlist("lve")) # [‘swimming‘, ‘shopping‘] # 把ImmutableMultiDict转换成普通字典 print(request.args.to_dict(flat=False)) # {‘name‘: [‘xiaoming‘], ‘password‘: [‘123‘], ‘lve‘: [‘swimming‘, ‘shopping‘]} print(request.args.to_dict(flat=True)) # {‘name‘: ‘xiaoming‘, ‘password‘: ‘123‘, ‘lve‘: ‘swimming‘} return "ok" """== 获取请求体数据 ==""" @app.route(rule="/data",methods=["post","put","patch"]) def data(): """接受客户端发送过来的请求体数据,是request.json,request.form,request.files等无法接受的数据,全部会保留到这里""" print(request.data) # # 接受表单提交的数据 print(request.form) # ImmutableMultiDict([(‘username‘, ‘root‘), (‘password‘, ‘123456‘)]) # 接受ajax或其他客户端提交过来的json数据 print(request.json) # {‘username‘: ‘root‘, ‘password‘: ‘123456‘} # 接受上传文件 avatar = request.files["avatar"] # ImmutableMultiDict([(‘avatar‘, <FileStorage: ‘123.jpg‘ (‘image/jpeg‘)>)]) print(avatar) # <FileStorage: ‘123.jpg‘ (‘image/jpeg‘)> # 获取请求头信息 print( request.headers ) # 获取全部的而请求头信息 print( request.headers.get("Host") ) # 获取自定义请求头 print( request.headers.get("company") ) # oldboy print( request.headers["company"] ) # oldboy # 本次请求的url地址 print( request.url) # http://127.0.0.1:5000/data print( request.path ) # /data return "ok" # 声明和加载配置 class Config(): DEBUG = True app.config.from_object(Config) if __name__ == ‘__main__‘: # 运行flask app.run(host="0.0.0.0")
flask默认支持2种响应方式:
数据响应: 默认响应html文本,也可以返回 JSON格式,或其他格式
页面响应: 重定向
url_for 视图之间的跳转
响应的时候,flask也支持自定义http响应状态码
响应的html文本
from flask import make_response @app.route("/") def index(): # [默认支持]响应html文本 return "<img src=‘http://flask.pocoo.org/static/logo.png‘>" return make_response("<h1>hello user</h1>") # 等同于上面的一段
返回json数据
from flask import Flask, request, jsonify # jsonify 就是json里面的jsonify @app.route("/") def index(): # 也可以响应json格式代码 data = [ {"id":1,"username":"liulaoshi","age":18}, {"id":2,"username":"liulaoshi","age":17}, {"id":3,"username":"liulaoshi","age":16}, {"id":4,"username":"liulaoshi","age":15}, ] return jsonify(data)
flask中返回json 数据,都是flask的jsonify方法返回就可以了.
重定向到百度页面
from flask import redirect # 页面跳转响应 @app.route("/user") def user(): # 页面跳转 redirect函数就是response对象的页面跳转的封装 # Location: http://www.baidu.com return redirect("http://www.baidu.com")
可以直接填写自己 url 路径
也可以使用 url_for 生成指定视图函数所对应的 url
from flask import url_for
# 内容响应 @app.route("/") def index(): # [默认支持]响应html文本 # return "<img src=‘http://flask.pocoo.org/static/logo.png‘>" # 也可以响应json格式代码 data = [ {"id":1,"username":"liulaoshi","age":18}, {"id":2,"username":"liulaoshi","age":17}, {"id":3,"username":"liulaoshi","age":16}, {"id":4,"username":"liulaoshi","age":15}, ] return jsonify(data) #使用url_for可以实现视图方法之间的内部跳转 # url_for("视图方法名") @app.route("/login") def login(): return redirect( url_for("index") )
# 路由传递参数 @app.route(‘/user/<user_id>‘) def user_info(user_id): return ‘hello %d‘ % user_id # 重定向 @app.route(‘/demo4‘) def demo4(): # 使用 url_for 生成指定视图函数所对应的 url return redirect( url_for(endpoint="user",user_id=100) )
在 Flask 中,可以很方便的返回自定义状态码,以实现不符合 http 协议的状态码,例如:status code: 777
@app.route(‘/demo4‘) def demo4(): return ‘状态码为 666‘, 400 """还可以使用make_response创建Response对象,然后通过response对象返回数据""" from flask import make_response @app.route("/rep") def index7(): response = make_response("ok") print(response) response.headers["Company"] = "oldboy" # 自定义响应头 response.status_code = 201 # 自定义响应状态码 return response
所谓的会话,就是客户端浏览器和服务端网站之间一次完整的交互过程.
会话的开始是在用户通过浏览器第一次访问服务端网站开始.
会话的结束时在用户通过关闭浏览器以后,与服务端断开.
所谓的会话控制,就是在客户端浏览器和服务端网站之间,进行多次http请求响应之间,记录、跟踪和识别用户的信息而已。
因为 http 是一种无状态协议,浏览器请求服务器是无状态的。
无状态:指一次用户请求时,浏览器、服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求。
无状态原因:浏览器与服务器是使用 socket 套接字进行通信的,服务器将请求结果返回给浏览器之后,会关闭当前的 socket 连接,而且服务器也会在处理页面完毕之后销毁页面对象。
有时需要保持下来用户浏览的状态,比如用户是否登录过,浏览过哪些商品等
实现状态保持主要有两种方式:
在客户端存储信息使用Cookie,token[jwt,oauth]
在服务器端存储信息使用Session
标签:保留 link ajax 关闭 headers 结束 查询 客户端浏览器 入参
原文地址:https://www.cnblogs.com/xo1990/p/14806359.html