参数篇

request接收数据

  1. request对象
  2. method:当前请求方法(POSTGET等)
  3. url:当前链接地址
  4. path:当前链接的路径
  5. environ:潜在的WSGI环境
  6. headers:传入的请求头作为字典类对象
  7. data:包含传入的请求数据作为
  8. args:请求链接中的参数(GET参数),解析后
  9. formform提交中的参数,解析后
  10. valuesargsforms的集合
  11. jsonjson格式的body数据,解析后
  12. cookiescookie读取

request对象

  1. #1 生成response对象
  2. response = make_response(render_template(index.html))
  3. 方法
  4. status:响应状态
  5. headers:响应头,设置http字段
  6. set_coockie:设置一个cookie

response对象

1.get请求
request.args.get("key") 获取get请求参数

2.post请求

request.form.get("key", type=str, default=None) 获取表单数据

request.values.get("key") 获取所有参数

# 参数解析对象生成
parser = reqparse.RequestParser()

args = parser.parse_args()

  1. parser.add_argument("username", type=str, required=True)
  2. parser.add_argument("password", required=True)
  3. parser.add_argument("cpuCount", type=int, required=True)
  4. parser.add_argument("memorySize", type=int, required=True)
  5. parser.add_argument("diskSize", type=int, required=True)
  6. args = parser.parse_args()
  7. print 'flask_restful%s' %args # {'username': 'zk', 'diskSize': 1000, 'cpuCount': 2, 'password': u'123456789', 'memorySize': 512}
  8. inf_json = request.json
  9. print 'json%s' %inf_json # None
  10. inf_get_json = request.get_json
  11. print 'get_json%s' %inf_get_json # <bound method Request.get_json of <Request 'http://127.0.0.1:5000/login' [POST]>>
  12. inf_valus = request.values
  13. print 'valus%s' %inf_valus # valusCombinedMultiDict([ImmutableMultiDict([]), ImmutableMultiDict([('username', u'zk'), ('memorySize', u'512'), ('password', u'123456789'), ('cpuCount', u'2'), ('diskSize', u'1000')])])
  14. inf_form = request.form
  15. print 'form%s' %inf_form # formImmutableMultiDict([('username', u'zk'), ('memorySize', u'512'), ('password', u'123456789'), ('cpuCount', u'2'), ('diskSize', u'1000')])
  16. inf_get_data = request.get_data
  17. print 'get_data%s' %inf_get_data # get_data<bound method Request.get_data of <Request 'http://127.0.0.1:5000/login' [POST]>>
  1. username = request.form.get("username")
  2. password = request.form.get("password", type=str, default=None)
  3. cpuCount = request.form.get("cpuCount", type=int, default=None)
  4. memorySize = request.form.get("memorySize", type=int, default=None)
  1. @app.route('/login',methods=["GET","POST"])
  2. def login():
  3. if request.method == "POST":
  4. # 以POST方式传参数,通过form取值
  5. # 如果Key之不存在,报错KeyError,返回400的页面
  6. username = request.form['username']
  7. password = request.form['password']
  8. print username,password
  9. else:
  10. # 以GET方式传参数,通过args取值
  11. username = request.args['username']
  12. print username
  13. return render_template('login.html', req_method=request.method)

文件上传

  1. from werkzeug.utils import secure_filename
  2. @app.route('/uploads', methods=['GET', 'POST'])
  3. def uploads():
  4. if request.method == "POST":
  5. fe = request.files['files']
  6. # basepath = os.path.dirname(os.path.abspath(__file__))
  7. basepath = os.path.abspath(os.path.dirname(__file__))
  8. upload_path = os.path.join(basepath, 'static', 'upload')
  9. # f.filename可以拿到文件名,但是是客户端定义的名,不要相信这个名称,用secure_filename包装一下
  10. fe.save(upload_path+'/'+secure_filename(fe.filename))
  11. # 这里的url_for 和jinja的前端用法不一样,可以忽略.的引用
  12. # url_for重定向
  13. return redirect(url_for('uploads'))
  14. return render_template('upload.html')

cookie设置

  1. @app.route('/index')
  2. def index():
  3. response = make_response(render_template('index.html',title='Index'))
  4. reqparse.set_cookie('username', '')
  5. return response

自定义错误页面

  1. from flask import abort
  2. @app.errorhandler(404)
  3. def page_not_not_found(error):
  4. return render_template('404.html'), 404

验证格式

  1. import jsonschema
  2.  
  3. #定义格式要求
  4. #https://jsonschema.net/#/editor
  5.  
  6. json_layout = {
  7. "$schema": "http://json-schema.org/draft-04/schema#",
  8. "type": "object",
  9. "properties": {
  10. "username": {
  11. "type": "string"
  12. },
  13. "password": {
  14. "type": "string"
  15. },
  16. "cpuCount": {
  17. "type": "integer"
  18. },
  19. "memorySize": {
  20. "type": "integer"
  21. },
  22. "diskSize": {
  23. "type": "integer"
  24. }
  25. },
  26. "required": [
  27. "username",
  28. "password",
  29. "cpuCount",
  30. "memorySize",
  31. "diskSize"
  32. ]
  33. }
  34.  
  35. def login():
  36. if request.method == "POST":
  37. # 以POST方式传参数,通过form取值
  38. # 如果Key之不存在,报错KeyError,返回400的页面
  39. parser.add_argument("username", required=True)
  40. parser.add_argument("password", required=True)
  41. parser.add_argument("cpuCount", type=int, required=True)
  42. parser.add_argument("memorySize", type=int, required=True)
  43. parser.add_argument("diskSize", type=int, required=True)
  44. args = parser.parse_args()
  45. # 获取到参数后,传入,验证
  46. jsonschema.validate(args, json_layout)
  47. return u'login返回'
  48.  
  49. 格式正常无返回值(None
  50. 格式错误报错ValidationError

flask_之参数传递的更多相关文章

  1. js学习之函数的参数传递

    我们都知道在 ECMAScript 中,数据类型分为原始类型(又称值类型/基本类型)和引用类型(又称对象类型):这里我将按照这两种类型分别对函数进行传参,看一下到底发生了什么. 参数的理解 首先,我们 ...

  2. kettle中含有参数传递的定时任务

    (1)新建一个作业(新建->作业),并在控制面板右键: (2)设置一个命令参数: (3)把作业的参数传递给转换: (4)在转换中右键设置转换属性: (5)接收作业中设置的传递参数: (6)参数的 ...

  3. Java基础知识笔记(七:接口、变量作用域和参数传递)

    一.接口 Java语言不允许一个子类拥有多个直接父类,即任何子类只能有一个直接父类.但允许一个类实现多个接口,即在定义类的接口名称列表中可以包含1个或多个接口名称,从而实现多重继承的特性.接口的定义格 ...

  4. shell 脚本之获取命令输出字符串以及函数参数传递

    在ubuntu 14.04之后,所有的U盘挂载也分用户之分,最近很多操作也和U盘有关,所以就研究了一上午shell脚本函数以及字符串操作的方法. 字符串操作: 获取他的命令输出比较简单,打个简单的比方 ...

  5. 【GoLang】golang 闭包 closure 参数传递的蹊跷!

    结论: 闭包函数可以直接引用外层代码定义的变量, 但是,注意,闭包函数里面引用的是变量的地址, 当goroutine被调度时,改地址的值才会被传递给goroutine 函数. 介绍 go的闭包是一个很 ...

  6. JQuery Mobile 页面参数传递

    在单页模版中使用基于HTTP的方式通过POST和GET请求传递参数,而在多页模版中不需要与服务器进行通信,通常在多页模版中有以下三种方法来实现页面间的参数传递. 1.GET方式:在前一个页面生成参数并 ...

  7. Java 中的值传递和参数传递

    Java中没有指针,所以也没有引用传递了,仅仅有值传递不过可以通过对象的方式来实现引用传递 类似java没有多继承 但可以用多次implements 接口实现多继承的功能 值传递:方法调用时,实际参数 ...

  8. 【Python学习】函数参数传递方法四种(位置,关键字,默认值,包裹位置,包裹关键字传递)

    1. 位置传递: #--coding:utf-8-- def send(name,address): return 'package is sent to %s, located in %s' %(n ...

  9. JAVA反射参数传递

    引用:http://fish2700.blog.163.com/blog/static/130713192009103035723281/ 使用Method反射调用函数时,我们通常会遇到以下几种情况: ...

随机推荐

  1. Android如何配置init.rc中的开机启动进程(service)【转】

    本文转载自:http://blog.csdn.net/qq_28899635/article/details/56289063 开篇:为什么写这篇文章 先说下我自己的情况,我是个普通的大四学生,之前在 ...

  2. 从ffmpeg filter里出来的数据直接送给avcodec_encode_audio2编码,写文件有错。

    http://hi.baidu.com/mingyuejingque/item/78e71aff57ae9ec5a835a2e4 感谢mingyuejingque st = avformat_new_ ...

  3. iptables 端口映射

    一.环境和要实现功能 PC1的网络设置如下: eth0       192.168.0.29 内网 eth1 219.239.11.22 外网 PC2的网络设置则为:192.168.0.21 内网 我 ...

  4. python 模块和模块sys.argv

    In [5]: import os In [6]: os.__file__ Out[6]: '/usr/local/lib/python2.7/os.pyc' In [7]: import rando ...

  5. 「LuoguP1379」 八数码难题(迭代加深

    [P1379]八数码难题 - 洛谷 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种 ...

  6. redis sentinel(哨兵)配置解读

    1 port <sentinel-port> :哨兵实例运行所在的端口(默认26379) 2 sentinel announce-ip:哨兵将会在gossip hello消息中使用指定的i ...

  7. C#中,当鼠标移动到控件上,动态显示提示内容 ToolTip

    [背景]写了个C#的小程序,其中在Settings窗体中有些配置参数,希望在鼠标移动到对应的配置选项上,动态显示相关的说明解释内容. [解决过程]1.原先就已经知道,有些控件,是带ToolTipTex ...

  8. Python_XML的三种解析方法

    什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这 ...

  9. 国内互联网公司的开源项目及github地址汇总

    国内互联网公司的开源项目及github地址汇总 阿里 阿里的开源项目很多,这也跟@淘宝正明的开源态度密不可分.有很多重量级的项目,例如LVS.Tengine,或者很有实践价值的中间件,例如 MetaQ ...

  10. Windows下启动停止Oracle11g服务-为解决系统变慢而生

    我们拿Oracle 11g作为例子. 首先在“开始=〉运行”中输入“services.msc”,按回车,进入“服务”控制台, 将 Oracle ORCL VSS Writer Service.Orac ...