分析python请求数据


Posted in Python onAugust 19, 2018

本节讲解了 flask 的请求,如果想在没有请求的情况下获取上下文,可以使用test_request_context()或者request_context(),从request对象的form中可以获取表单的数据,args中可以获取 URL 中的参数,files可以获取上传的文件,cookies可以操作cookie。

首先你需要从 flask 模块中导入request:

from flask import request

当前请求的方法可以用method属性来访问。你可以用form属性来访问表单数据 (数据在 POST 或者PUT中传输)。这里是上面提及到的两种属性的完整的例子,请重新修改hello.py文件为:

@app.route('/login', methods=['POST', 'GET'])
def login():
  error = None
  if request.method == 'POST':
    if valid_login(request.form['username'],
            request.form['password']):
      return log_the_user_in(request.form['username'])
    else:
      error = 'Invalid username/password'
  # 当请求形式为“GET”或者认证失败则执行以下代码
  return render_template('login.html', error=error)

如果在form属性中不存在上述键值会发生些什么?在这种情况下会触发一个特别的KeyError。你可以像捕获标准的KeyError一样来捕获它,如果你不这样去做,会显示一个HTTP 400 Bad Request错误页面。所以很多情况下你不需要处理这个问题。

你可以用args属性来接收在URL ( ?key=value )中提交的参数:

searchword = request.args.get('key', '')

我们推荐使用get来访问 URL 参数或捕获KeyError,因为用户可能会修改 URL, 向他们显示一个400 bad request页面不是用户友好的。

你能够很容易地用 Flask 处理文件上传。只要确保在你的 HTML 表单中不要忘记设置属性enctype="multipart/form-data",否则浏览器将不会传送文件。

上传的文件是存储在内存或者文件系统上一个临时位置。你可以通过请求对象中files属性访问这些文件。每个上传的文件都会存储在这个属性字典里。它表现得像一个标准的 Python file对象,但是它同样具有save()方法,该方法允许你存储文件在服务器的文件系统上。

下面是一个简单的例子用来演示提交文件到服务器上:

from flask import request
 
@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
  if request.method == 'POST':
    f = request.files['the_file']
    f.save('/var/www/uploads/uploaded_file.txt')
  ...

如果你想要知道在上传到你的应用之前在客户端的文件名称,你可以访问filename属性。但请记住永远不要信任这个值,因为这个值可以伪造。如果你想要使用客户端的文件名来在服务器上存储文件,把它传递到Werkzeug提供给你的secure_filename()函数:

from flask import request
from werkzeug import secure_filename
 
@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
  if request.method == 'POST':
    f = request.files['the_file']
    f.save('/var/www/uploads/' + secure_filename(f.filename))
  ...

3.1.4 Cookies

你可以用cookies属性来访问cookies。你能够用响应对象的set_cookie来设置cookies。请求对象中的cookies属性是一个客户端发送所有的cookies的字典。

如果你要使用会话(sessions),请不要直接使用cookies,相反,请用 Flask 中的会话,Flask 已经在cookies上增加了一些安全细节;关于更多seesions和cookies的区别与联系,请参见施杨出品的博客。

读取 cookies:

from flask import request
 
@app.route('/')
def index():
  username = request.cookies.get('username')
  # 注意这里引用cookies字典的键值对是使用cookies.get(key)
  # 而不是cookies[key],这是防止该字典不存在时报错"keyerror"

存储 cookies:

from flask import make_response
 
@app.route('/')
def index():
  resp = make_response(render_template(...))
  resp.set_cookie('username', 'the username')
  return resp

注意cookies是在响应对象中被设置。由于通常只是从视图函数返回字符串, Flask 会将其转换为响应对象。如果你要显式地这么做,你可以使用 make_response()函数接着修改它。

有时候你可能要在响应对象不存在的地方设置cookie。利用 延迟请求回调模式使得这种情况成为可能。

Python 相关文章推荐
使用基于Python的Tornado框架的HTTP客户端的教程
Apr 24 Python
Python正则表达式分组概念与用法详解
Jun 24 Python
python中类和实例如何绑定属性与方法示例详解
Aug 18 Python
用Eclipse写python程序
Feb 10 Python
Python import与from import使用及区别介绍
Sep 06 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
Jan 05 Python
Python读写文件基础知识点
Jun 10 Python
Django处理Ajax发送的Get请求代码详解
Jul 29 Python
检测tensorflow是否使用gpu进行计算的方式
Feb 03 Python
解决Python import docx出错DLL load failed的问题
Feb 13 Python
如何基于python3和Vue实现AES数据加密
Mar 27 Python
浅谈Django中的QueryDict元素为数组的坑
Mar 31 Python
浅谈django orm 优化
Aug 18 #Python
django连接mysql配置方法总结(推荐)
Aug 18 #Python
python画一个玫瑰和一个爱心
Aug 18 #Python
python爱心表白 每天都是浪漫七夕!
Aug 18 #Python
Python实现全排列的打印
Aug 18 #Python
python递归实现快速排序
Aug 18 #Python
pyqt5的QWebEngineView 使用模板的方法
Aug 18 #Python
You might like
第四节 构造函数和析构函数 [4]
2006/10/09 PHP
PHP针对JSON操作实例分析
2015/01/12 PHP
PHP开发注意事项总结
2015/02/04 PHP
php实现统计目录文件大小的函数
2015/12/25 PHP
yii2超好用的日期组件和时间组件
2016/05/05 PHP
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
2011/04/16 Javascript
使用jquery操作session方法分享
2015/01/22 Javascript
jquery.cookie.js实现用户登录保存密码功能的方法
2016/04/15 Javascript
浅谈Sublime Text 3运行JavaScript控制台
2016/06/06 Javascript
基于js实现的限制文本框只可以输入数字
2016/12/05 Javascript
Bootstrap modal 多弹窗之叠加引起的滚动条遮罩阴影问题
2017/02/27 Javascript
JS+Ajax实现百度智能搜索框
2017/08/04 Javascript
Angular2 组件间通过@Input @Output通讯示例
2017/08/24 Javascript
vue中如何使用ztree
2018/02/06 Javascript
Vue中全局变量的定义和使用
2019/06/05 Javascript
VUE写一个简单的表格实例
2019/08/06 Javascript
vue el-tree 默认展开第一个节点的实现代码
2020/05/15 Javascript
解决Python字典写入文件出行首行有空格的问题
2017/09/27 Python
20个常用Python运维库和模块
2018/02/12 Python
python实现人民币大写转换
2018/06/20 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
2020/04/20 Python
Python常见反爬虫机制解决方案
2020/06/01 Python
纯CSS3实现绘制各种图形实现代码详细整理
2012/12/26 HTML / CSS
HTML5+CSS3 实现灵动的动画 TAB 切换效果(DEMO)
2017/09/15 HTML / CSS
迪士尼西班牙官方网上商店:ShopDisney西班牙
2020/02/02 全球购物
Java如何获得ResultSet的总行数
2016/09/03 面试题
机电一体化职业规划书
2014/01/07 职场文书
开学典礼主持词
2014/03/19 职场文书
岗位说明书范文
2014/05/07 职场文书
乡镇爱国卫生月活动总结
2014/06/25 职场文书
社区务虚会发言材料
2014/10/20 职场文书
学校运动会加油词
2015/07/18 职场文书
十一月早安语录:把心放轻,人生就是一朵自在的云
2019/11/04 职场文书
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle
Python学习之os包使用教程详解
2022/03/21 Python
CSS实现背景图片全屏铺满自适应的3种方式
2022/07/07 HTML / CSS