一. 参数传递两种方式:

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()

from flask import Flask, redirect, url_for ,request
app = Flask(__name__)
@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取值,如果不用args取值,若输入类似地址的值会报错
username = request.args['username']
print username
return render_template('login.html', req_method=request.method) if __name__ == '__main__':
app.run(debug = True)

在网页输入http://127.0.0.1:5000/login/

传递参数:

  • 传递参数的语法是:`/<参数名>/`。然后在视图函数中,也要定义同名的参数。例如:
 @app.route('/article/<string:test>/')

 # 传递的参数名是test,因此就需要在函数的形参中定义同名的参数test

 def test_article(test):

     return 'test_article:{}'.format(test)

参数的数据类型:

1. 如果没有指定具体的数据类型,那么默认就是使用`string`数据类型。

2. `int`数据类型只能传递`int`类型。 限制参数:<int:article_id>,如果在浏览器中访问:http://127.0.0.1:5000/p/11111.0/ 那就找不到报not found错误,因为我限制了是整形,你现在是浮点型,同理,如果你是浮点型,我使用 整形访问,那就又访问不到了

3. `float`数据类型只能传递`float`类型。

4. `path`数据类型和`string`有点类似,都是可以接收任意的字符串, 但是`path`可以接收路径,也就是说可以包含斜杠。

5. `uuid`数据类型只能接收符合`uuid`的字符串。`uuid`是一个全宇宙都唯一的字符串, 一般可以用来作为表的主键。

关于path数据类型,在主文件中定义如下的代码:

@app.route('/article/<path:test>/') path数据类型

def test_article(test):

     return 'test_article:{}'.format(test)
  • # 通过问号的形式传递参数,例如百度:http://127.0.0.1:5000/d/?wd=%E7%AE%80%E4%B9%A6&pn=20
@app.route('/d/')

def d():

    wd = request.args.get("wd")

    page_number = request.args.get("pn")

    return "通过字符串查询的关键字为:{}, 页码为:{}".format(wd, page_number)

接收用户传递的参数:

1. 第一种:使用path的形式(将参数嵌入到路径中),就是上面讲的。

2. 第二种:使用查询字符串的方式,就是通过`?key=value`的形式传递的。

@app.route('/d/')

def d():

wd = request.args.get('wd')

return '您通过查询字符串的方式传递的参数是:%s' % wd ```

3. 如果你的这个页面的想要做`SEO`优化,就是被搜索引擎搜索到,那么推荐使用第一种形式(path的形式)。 如果不在乎搜索引擎优化,那么就可以使用第二种(查询字符串的形式)。

文件上传

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

版权声明:本文为CSDN博主「xiaoming0018」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiaoming0018/article/details/83024383

flask参数传递的更多相关文章

  1. Flask基础(03)-->创建第一个Flask程序

    # 导入Flask from flask import Flask # 创建Flask的应用程序 # 参数__name__指的是Flask所对应的模块,其决定静态文件从哪个地方开始寻找 app = F ...

  2. flask学习(九):模板渲染和参数传递

    一. 如何渲染模板 1. 模板放在templates文件夹下 2. 从flask中导入render_template函数 3. 在视图函数中,使用render_template函数,渲染模板 注意:只 ...

  3. 测开之路一百二十五:flask之urlencode参数传递和解析

    当get请求传参时,用?分隔参数和域名,用&分隔参数,如果参数里面本身就有&符号就会识别不出来,还是会当成分隔符,所以这些数据在传输的时候,就需要转义,现在普遍是转成urlencode ...

  4. flask源码分析

    本flask源码分析不间断更新 而且我分析的源码全是我个人觉得是很beautiful的 1 flask-login 1.1 flask.ext.login.login_required(func),下 ...

  5. Flask 教程

    官方文档 推荐教程 环境 pip install virtualenv cd proj_fold virtualenv venv . venv/bin/activate for *unix or ve ...

  6. flask笔记---url、变量规则

    1.路由: route() 装饰器用于把一个函数绑定到一个 URL,可以动态变化 URL 的某些部分,还可以为一个函数指定多个规则,从而方便用户访问与记忆. 例子: @app.route('/') # ...

  7. flask学习

    安装环境: centos 6.3 python2.6 使用easy_install安装方式: [root@localhost ~]# easy_install flask 简单的hello from  ...

  8. flask前后台交互数据的几个思路

    通过url进行参数传递: @app.route('/hello/<name>') # <name>为传递的参数 def hello(name=None): return ren ...

  9. 【转】Flask快速入门

    迫不及待要开始了吗?本页提供了一个很好的 Flask 介绍,并假定你已经安装好了 Flask.如果没有,请跳转到 安装 章节. 一个最小的应用 一个最小的 Flask 应用看起来会是这样: from ...

随机推荐

  1. 根据start和limit从已有的数据列表中获取从start开始的limit个数据

    代码记录(需求:根据start和limit从已有的数据列表中获取从start开始的limit个数据) 已有的数据列表:这个数据列表是经过处理的,可能是在SQL查询时无法处理的如多条件排序,而排序条件需 ...

  2. IO-file-05 文件夹的创建

    package com.bwie.io; import java.io.File; /** * 创建目录 * 1.mkdir:确保上级目录存在,不存在创建失败 * 2.mkdirs:上级目录可以不存在 ...

  3. ARTS第九周打卡

    Algorithm : 做一个 leetcode 的算法题 /* 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. ...

  4. GB2312 字符集

    <信息交换用汉字编码字符集>是由中国国家标准总局1980年发布,1981年5月1日开始实施的一套国家标准,标准号是GB 2312—1980. GB2312编码适用于汉字处理.汉字通信等系统 ...

  5. 安装jar包到本地仓库

    1.控制台安装 安装指定文件到本地仓库命令:mvn install:install-file-DgroupId=<groupId>       : 设置项目代码的包名(一般用组织名)-Da ...

  6. Sparse PCA 稀疏主成分分析

    Sparse PCA 稀疏主成分分析 2016-12-06 16:58:38 qilin2016 阅读数 15677 文章标签: 统计学习算法 更多 分类专栏: Machine Learning   ...

  7. jacascript Math (算数)对象

    前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 实际应用中用的比较多的有:round(); random(); floor(); ceil(); 其次还有 ...

  8. (错误)Lucene工具Luck启动错误

    启动luke命令行下图错误 错误原因:luke版本和lucene版本不匹配,lucene5.3.0版本必须用luke5.3.0版本才能打开索引. 解决方法:更新luke版本即可. luke 所有版本下 ...

  9. 巧用Ajax的beforeSend 提高用户体验--防止重复数据

    巧用Ajax的beforeSend 提高用户体验 jQuery是经常使用的一个开源js框架,其中的$.ajax请求中有一个beforeSend方法,用于在向服务器发送请求前执行一些动作.具体可参考jQ ...

  10. WebAPI 笔记

    一.基本配置 1. 全局配置 Global.asax public class WebApiApplication : System.Web.HttpApplication { protected v ...