一. 参数传递两种方式:

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. 日常工作问题解决:Redhat6.5--解决yum无法正常安装配置问题

    1.问题描述 解决RedHat6.5下yum功能不能用问题: 在redhat6.5下使用yum安装时,会提示:This system is not registered to Red Hat Subs ...

  2. 日常工作问题解决:centos7下使用yum安装软件报yum.pid锁定

    问题描述: 在centos7下使用yum进行软件安装时报yum.pid已经被锁定,如下所示: [root@centos7-129 ~]# yum -y install dhcp 已加载插件:faste ...

  3. 1、6 登陆 通过name 查到一个对象,如果没有。提示用户名不存在,再将查到的pwd 加传过来的pwd(需要加密)比较

    @RequestMapping("/login") public Object login(Student student) { Student s=studentService. ...

  4. JRE和JDK的作用和区别

    JVM(Java  Virtual Machine)是一个虚拟的用于执行bytecode字节码的“虚拟计算机”JRE(Java   Runtime  Environment):Java 虚拟机.库函数 ...

  5. poj2185(kmp算法next数组求最小循环节,思维)

    题目链接:https://vjudge.net/problem/POJ-2185 题意:给定由大写字母组成的r×c矩阵,求最小子矩阵使得该子矩阵能组成这个大矩阵,但并不要求小矩阵刚好组成大矩阵,即边界 ...

  6. elasticsearch-5.6.1删除index下的某个type

    由于elasticsearch-5.6.1不支持type直接删除,只能删除数据. 执行命令: curl -H "Content-Type: application/json" -X ...

  7. mysql支持emoji表情符存储

    一.教你如何让数据库支持emoji表情符存储 解决方式: 更换字符集utf8-->utf8mb4 问题描述: 前台应用抓取微博信息,每天总有几条数据插入不成功.应用日志显示: java.sql. ...

  8. 利用Python进行数据分析_Pandas_处理缺失数据

    申明:本系列文章是自己在学习<利用Python进行数据分析>这本书的过程中,为了方便后期自己巩固知识而整理. 1 读取excel数据 import pandas as pd import ...

  9. scratch少儿编程第一季——06、人在江湖混,没有背景怎么行。

    各位小伙伴大家好: 到上期我们学习了动作模块的全部指令.接下我们用动作模块做一个小小项目,来总结我们前面学的内容. 在做项目之前我们先来换一个背景. 在左下角舞台区,点击打开背景库,选择自己所需要的背 ...

  10. electron实现透明点投的方法

    1. electron createWindow 的时候 设置 transparent: true, clickThrough: 'pointer-events' 2. body 上添加 pointe ...