参数篇

request接收数据

request对象
method:当前请求方法(POST,GET等)
url:当前链接地址
path:当前链接的路径
environ:潜在的WSGI环境
headers:传入的请求头作为字典类对象
data:包含传入的请求数据作为
args:请求链接中的参数(GET参数),解析后
form:form提交中的参数,解析后
values:args和forms的集合
json:json格式的body数据,解析后
cookies:cookie读取

request对象

#1 生成response对象
response = make_response(render_template(index.html))
方法
status:响应状态
headers:响应头,设置http字段
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()

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

文件上传

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

cookie设置

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

自定义错误页面

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

验证格式

import jsonschema

#定义格式要求
#https://jsonschema.net/#/editor json_layout = {
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"username": {
"type": "string"
},
"password": {
"type": "string"
},
"cpuCount": {
"type": "integer"
},
"memorySize": {
"type": "integer"
},
"diskSize": {
"type": "integer"
}
},
"required": [
"username",
"password",
"cpuCount",
"memorySize",
"diskSize"
]
} def login():
if request.method == "POST":
# 以POST方式传参数,通过form取值
# 如果Key之不存在,报错KeyError,返回400的页面
parser.add_argument("username", required=True)
parser.add_argument("password", required=True)
parser.add_argument("cpuCount", type=int, required=True)
parser.add_argument("memorySize", type=int, required=True)
parser.add_argument("diskSize", type=int, required=True)
args = parser.parse_args()
# 获取到参数后,传入,验证
jsonschema.validate(args, json_layout)
return u'login返回' 格式正常无返回值(None)
格式错误报错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. Dispatch Sources(转)

    Dispatch Sources 现代系统通常提供异步接口,允许应用向系统提交请求,然后在系统处理请求时应用可以继续处理自己的事情.Grand Central Dispatch正是基于这个基本行为而设 ...

  2. java的一个爬虫

    进行抓取页面,我看了一下人家的教程,一般要用到htmlparser用来解析html得到一个网页的相关链接,用httpclient抓取网页数据, 下面是一我写的spider类 package com.o ...

  3. Xamarin.Forms初始

    前言 Xamarin.Forms 为 .NET 开发人员提供一个完整的跨平台 UI 工具包. 在 Visual Studio 中使用 C# 生成完全本机的 Android.iOS 和通用 Window ...

  4. WinDbg 调试工具的使用

    概述 项目接近尾声了,可是在运行时会有memory leak(内存泄露) bug.产品在运行一天后,内存增长致1.4G,而我们产品的初始内存才有70M,问题很严重,决定采用WinDbg工具来分析代码问 ...

  5. Android开发技巧--引用另一个工程

    现在已经有了一个Android工程A.我们想扩展A的功能,但是不想在A的基础上做开发,于是新建了另外一个Android工程B,想在B中引用A. 1:把工程A做成纯Jar包,这样其他的工程就可以直接引用 ...

  6. error:: undefined reference to symbol '__glewBufferSubData' 未定义的引用 以及 error: main.o: undefined reference to symbol 'glTexImage2D'

    在把DSO移植到QT工程中,出现了 /usr/bin/ld: KeyFrameDisplay.o: undefined reference to symbol '__glewBufferSubData ...

  7. 【Hadoop】MapReduce笔记(三):MapReduce的Shuffle和Sort阶段详解

    一.MapReduce 总体架构 整体的Shuffle过程包含以下几个部分:Map端Shuffle.Sort阶段.Reduce端Shuffle.即是说:Shuffle 过程横跨 map 和 reduc ...

  8. 【eclipse插件开发实战】Eclipse插件开发4——插件JDE、PDE开发方式及plugin.xml配置文件结构

    Eclipse插件开发4--插件JDE.PDE开发方式及plugin.xml配置文件结构 开发方式分为:java开发环境JDE开发插件的方式和插件开发环境PDE开发插件方式. 插件通过添加到预定义的扩 ...

  9. 【Linux学习】Linux系统管理1—进程管理

    Linux系统管理1-进程管理 一.Linux的三种进程 Linux包括3中不同类型的进程: 交互进程:由一个shell启动的进程.交互进程可以在前后台运行 批处理进程:该进程和终端无联系,是一个进程 ...

  10. TypeScript完全解读(26课时)_16.声明合并

    ts编辑器会将名字相同的多个声明合并为一个声明,合并后的声明,同时拥有多个声明的特性 example文件夹下新建merging.ts文件 定义相同名字的接口, 定义变量类型是上面的接口.,光写一个na ...