flask参数传递
一. 参数传递两种方式:
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参数传递的更多相关文章
- Flask基础(03)-->创建第一个Flask程序
# 导入Flask from flask import Flask # 创建Flask的应用程序 # 参数__name__指的是Flask所对应的模块,其决定静态文件从哪个地方开始寻找 app = F ...
- flask学习(九):模板渲染和参数传递
一. 如何渲染模板 1. 模板放在templates文件夹下 2. 从flask中导入render_template函数 3. 在视图函数中,使用render_template函数,渲染模板 注意:只 ...
- 测开之路一百二十五:flask之urlencode参数传递和解析
当get请求传参时,用?分隔参数和域名,用&分隔参数,如果参数里面本身就有&符号就会识别不出来,还是会当成分隔符,所以这些数据在传输的时候,就需要转义,现在普遍是转成urlencode ...
- flask源码分析
本flask源码分析不间断更新 而且我分析的源码全是我个人觉得是很beautiful的 1 flask-login 1.1 flask.ext.login.login_required(func),下 ...
- Flask 教程
官方文档 推荐教程 环境 pip install virtualenv cd proj_fold virtualenv venv . venv/bin/activate for *unix or ve ...
- flask笔记---url、变量规则
1.路由: route() 装饰器用于把一个函数绑定到一个 URL,可以动态变化 URL 的某些部分,还可以为一个函数指定多个规则,从而方便用户访问与记忆. 例子: @app.route('/') # ...
- flask学习
安装环境: centos 6.3 python2.6 使用easy_install安装方式: [root@localhost ~]# easy_install flask 简单的hello from ...
- flask前后台交互数据的几个思路
通过url进行参数传递: @app.route('/hello/<name>') # <name>为传递的参数 def hello(name=None): return ren ...
- 【转】Flask快速入门
迫不及待要开始了吗?本页提供了一个很好的 Flask 介绍,并假定你已经安装好了 Flask.如果没有,请跳转到 安装 章节. 一个最小的应用 一个最小的 Flask 应用看起来会是这样: from ...
随机推荐
- 日常工作问题解决:Redhat6.5--解决yum无法正常安装配置问题
1.问题描述 解决RedHat6.5下yum功能不能用问题: 在redhat6.5下使用yum安装时,会提示:This system is not registered to Red Hat Subs ...
- 日常工作问题解决:centos7下使用yum安装软件报yum.pid锁定
问题描述: 在centos7下使用yum进行软件安装时报yum.pid已经被锁定,如下所示: [root@centos7-129 ~]# yum -y install dhcp 已加载插件:faste ...
- 1、6 登陆 通过name 查到一个对象,如果没有。提示用户名不存在,再将查到的pwd 加传过来的pwd(需要加密)比较
@RequestMapping("/login") public Object login(Student student) { Student s=studentService. ...
- JRE和JDK的作用和区别
JVM(Java Virtual Machine)是一个虚拟的用于执行bytecode字节码的“虚拟计算机”JRE(Java Runtime Environment):Java 虚拟机.库函数 ...
- poj2185(kmp算法next数组求最小循环节,思维)
题目链接:https://vjudge.net/problem/POJ-2185 题意:给定由大写字母组成的r×c矩阵,求最小子矩阵使得该子矩阵能组成这个大矩阵,但并不要求小矩阵刚好组成大矩阵,即边界 ...
- elasticsearch-5.6.1删除index下的某个type
由于elasticsearch-5.6.1不支持type直接删除,只能删除数据. 执行命令: curl -H "Content-Type: application/json" -X ...
- mysql支持emoji表情符存储
一.教你如何让数据库支持emoji表情符存储 解决方式: 更换字符集utf8-->utf8mb4 问题描述: 前台应用抓取微博信息,每天总有几条数据插入不成功.应用日志显示: java.sql. ...
- 利用Python进行数据分析_Pandas_处理缺失数据
申明:本系列文章是自己在学习<利用Python进行数据分析>这本书的过程中,为了方便后期自己巩固知识而整理. 1 读取excel数据 import pandas as pd import ...
- scratch少儿编程第一季——06、人在江湖混,没有背景怎么行。
各位小伙伴大家好: 到上期我们学习了动作模块的全部指令.接下我们用动作模块做一个小小项目,来总结我们前面学的内容. 在做项目之前我们先来换一个背景. 在左下角舞台区,点击打开背景库,选择自己所需要的背 ...
- electron实现透明点投的方法
1. electron createWindow 的时候 设置 transparent: true, clickThrough: 'pointer-events' 2. body 上添加 pointe ...