分析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中字典的浅拷贝与深拷贝用法实例分析
Jan 02 Python
python+opencv实现动态物体识别
Jan 09 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
Jul 19 Python
Python闭包函数定义与用法分析
Jul 20 Python
PyQt5+requests实现车票查询工具
Jan 21 Python
python3.6实现学生信息管理系统
Feb 21 Python
浅谈Python中eval的强大与危害
Mar 13 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
Jun 26 Python
解决python3 requests headers参数不能有中文的问题
Aug 21 Python
python 弧度与角度互转实例
Apr 15 Python
Python 字符串池化的前提
Jul 03 Python
Python开发.exe小工具的详细步骤
Jan 27 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
一个程序下载的管理程序(四)
2006/10/09 PHP
php checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
php 读取文件头判断文件类型的实现代码
2013/08/05 PHP
PHP导出带样式的Excel示例代码
2016/08/28 PHP
PHP中的正则表达式实例详解
2017/04/25 PHP
PHP 模拟登陆功能实例详解
2019/09/10 PHP
php设计模式之迭代器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
JS Range HTML文档/文字内容选中、库及应用介绍
2011/05/12 Javascript
非常强大的 jQuery.AsyncBox 弹出对话框插件
2011/08/29 Javascript
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
2012/02/02 Javascript
xml转json的js代码
2012/08/28 Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
2015/01/13 Javascript
简单介绍JavaScript中字符串创建的基本方法
2015/07/07 Javascript
JS函数定义方式的区别介绍
2016/03/22 Javascript
js动态添加的DIV中的onclick事件简单实例
2016/07/25 Javascript
微信小程序 页面跳转传参详解
2016/10/28 Javascript
js实现移动端编辑添加地址【模仿京东】
2017/04/28 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
使用vue脚手架(vue-cli)搭建一个项目详解
2019/05/09 Javascript
swiper实现异形轮播效果
2019/11/28 Javascript
VueCli生产环境打包部署跨域失败的解决
2020/11/13 Javascript
Python使用pymysql小技巧
2017/06/04 Python
python使用tkinter实现简单计算器
2018/01/30 Python
基于MTCNN/TensorFlow实现人脸检测
2018/05/24 Python
python中字典按键或键值排序的实现代码
2019/08/27 Python
python实现随机加减法生成器
2020/02/24 Python
tensorflow实现残差网络方式(mnist数据集)
2020/05/26 Python
英国高街电视:High Street TV
2018/05/22 全球购物
美国在线艺术商店:HandmadePiece
2020/11/06 全球购物
如何在发生故障的节点上重新安装 SQL Server
2013/03/14 面试题
男方父母证婚词
2014/01/12 职场文书
元旦晚会主持词
2014/03/24 职场文书
三八妇女节活动总结
2014/05/04 职场文书
铣床操作工岗位职责
2014/06/13 职场文书
小学教师师德师风个人整改措施
2014/09/18 职场文书
毕业生实习证明
2014/09/19 职场文书