分析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 相关文章推荐
用PyQt进行Python图形界面的程序的开发的入门指引
Apr 14 Python
Python 查看文件的编码格式方法
Dec 21 Python
python合并同类型excel表格的方法
Apr 01 Python
Python入门学习指南分享
Apr 11 Python
解决Matplotlib图表不能在Pycharm中显示的问题
May 24 Python
Python调用C++,通过Pybind11制作Python接口
Oct 16 Python
python twilio模块实现发送手机短信功能
Aug 02 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
Feb 03 Python
Python操作注册表详细步骤介绍
Feb 05 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
Apr 29 Python
Python脚本实现Zabbix多行日志监控过程解析
Aug 26 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
Mar 03 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
《破坏领主》销量已超100万 未来将继续开发新内容
2020/03/08 其他游戏
php中突破基于HTTP_REFERER的防盗链措施(stream_context_create)
2011/03/29 PHP
php中simplexml_load_string使用实例分享
2014/02/13 PHP
超详细的php用户注册页面填写信息完整实例(附源码)
2015/11/17 PHP
基于jQuery的图片大小自动适应实现代码
2010/11/17 Javascript
js网页侧边随页面滚动广告效果实现
2011/04/14 Javascript
子页向父页传值示例
2013/11/27 Javascript
JS调用页面表格导出excel示例代码
2014/03/18 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法
2015/05/14 Javascript
freemarker判断对象是否为空的方法
2015/08/13 Javascript
浅谈javascript中遇到的字符串对象处理
2016/11/18 Javascript
JavaScript实现分页效果
2017/03/28 Javascript
Vue-cli项目获取本地json文件数据的实例
2018/03/07 Javascript
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python编写百度贴吧的简单爬虫
2015/04/02 Python
在Python中封装GObject模块进行图形化程序编程的教程
2015/04/14 Python
python类继承用法实例分析
2015/05/27 Python
Python实现批量修改文件名实例
2015/07/08 Python
python学习笔记之调用eval函数出现invalid syntax错误问题
2015/10/18 Python
程序员的七夕用30行代码让Python化身表白神器
2019/08/07 Python
Python之Django自动实现html代码(下拉框,数据选择)
2020/03/13 Python
python让函数不返回结果的方法
2020/06/22 Python
python怎么判断素数
2020/07/01 Python
Python连接mysql方法及常用参数
2020/09/01 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
css3 transform过渡抖动问题解决
2020/10/23 HTML / CSS
canvas压缩图片以及卡片制作的方法示例
2018/12/04 HTML / CSS
启动一个线程是用run()还是start()
2016/12/25 面试题
毕业生求职找工作的自我评价范文
2013/11/27 职场文书
关于运动会的口号
2014/06/07 职场文书
党员四风自我剖析材料
2014/10/07 职场文书
2014年乡镇纪委工作总结
2014/12/19 职场文书
php微信小程序解包过程实例详解
2021/03/31 PHP
Go 在 MongoDB 中常用查询与修改的操作
2021/05/07 Golang
python实现简单聊天功能
2021/07/07 Python