分析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 七种邮件内容发送方法实例
Apr 22 Python
Python的Bottle框架中实现最基本的get和post的方法的教程
Apr 30 Python
Python循环语句中else的用法总结
Sep 11 Python
pip matplotlib报错equired packages can not be built解决
Jan 06 Python
一文带你了解Python中的字符串是什么
Nov 20 Python
Python 正则表达式匹配字符串中的http链接方法
Dec 25 Python
基于Python安装pyecharts所遇的问题及解决方法
Aug 12 Python
Python使用graphviz画流程图过程解析
Mar 31 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
Apr 27 Python
Pandas把dataframe或series转换成list的方法
Jun 14 Python
详解PyQt5中textBrowser显示print语句输出的简单方法
Aug 07 Python
python 实现简易的记事本
Nov 30 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
社区(php&&mysql)三
2006/10/09 PHP
推荐php模板技术[转]
2007/01/04 PHP
PHP has encountered an Access Violation
2007/01/15 PHP
ie6 动态缩略图不显示的原因
2009/06/21 PHP
php pdo oracle中文乱码的快速解决方法
2016/05/16 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
javascript 清除输入框中的数据
2009/04/13 Javascript
超越Jquery_01_isPlainObject分析与重构
2010/10/20 Javascript
在JavaScript中获取请求的URL参数
2010/12/22 Javascript
Mac地址验证的javascript代码
2013/11/09 Javascript
动态显示可输入的字数提示还可以输入的字数
2014/04/01 Javascript
js实现跟随鼠标移动且带关闭功能的图片广告实例
2015/02/26 Javascript
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
js当前页面登录注册框,固定div,底层阴影的实例代码
2016/10/04 Javascript
实例解析angularjs的filter过滤器
2016/12/14 Javascript
JS实现双击内容变为可编辑状态
2017/03/03 Javascript
javascript 判断一个对象为数组的方法
2017/05/03 Javascript
详解如何使用 vue-cli 开发多页应用
2017/12/16 Javascript
你可能不知道的前端算法之文字避让(inMap)
2018/01/12 Javascript
vue-cli安装使用流程步骤详解
2018/11/08 Javascript
通过jQuery学习js类型判断的技巧
2019/05/27 jQuery
JavaScript解析JSON数据示例
2019/07/16 Javascript
Vue+iview+webpack ie浏览器兼容简单处理
2019/09/20 Javascript
webstorm建立vue-cli脚手架的傻瓜式教程
2020/09/22 Javascript
[16:19]教你分分钟做大人——风暴之灵
2015/03/11 DOTA
Python实现视频下载功能
2017/03/14 Python
python批量修改文件夹及其子文件夹下的文件内容
2019/03/15 Python
Python常见数字运算操作实例小结
2019/03/22 Python
wxpython实现按钮切换界面的方法
2019/11/19 Python
牵手50香港:专为黄金岁月的单身人士而设的交友网站
2020/08/14 全球购物
水污染治理工程专业自荐信
2014/06/21 职场文书
公务员党员评议表自我鉴定
2014/09/14 职场文书
2015年度质量工作总结报告
2015/04/27 职场文书
学校学习型党组织建设心得体会
2019/06/21 职场文书
八年级作文之我的母亲
2019/12/10 职场文书
公历12个月名称的由来
2022/04/12 杂记