分析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 28 Python
Python判断文件或文件夹是否存在的三种方法
Jul 27 Python
python中使用psutil查看内存占用的情况
Jun 11 Python
python+selenium实现QQ邮箱自动发送功能
Jan 23 Python
Python制作exe文件简单流程
Jan 24 Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
Aug 06 Python
Django中自定义admin Xadmin的实现代码
Aug 09 Python
python实现将视频按帧读取到自定义目录
Dec 10 Python
django rest framework serializer返回时间自动格式化方法
Mar 31 Python
基于Python模拟浏览器发送http请求
Nov 06 Python
Pyhton模块和包相关知识总结
May 12 Python
python代码实现备忘录案例讲解
Jul 26 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判断并删除空目录及空子目录的方法
2015/02/11 PHP
在Mac上编译安装PHP7的开发环境
2015/07/28 PHP
php实现文件预览功能
2017/05/23 PHP
js实现收缩菜单效果实例代码
2013/10/30 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
2015/03/04 Javascript
JavaScript实现俄罗斯方块游戏过程分析及源码分享
2015/03/23 Javascript
jQuery插件实现静态HTML验证码校验
2015/11/06 Javascript
jQuery实现图片局部放大镜效果
2016/03/17 Javascript
Bootstrap每天必学之导航组件
2016/04/25 Javascript
Vue.js系列之项目结构说明(2)
2017/01/03 Javascript
在 Angular2 中实现自定义校验指令(确认密码)的方法
2017/01/23 Javascript
JS中利用localStorage防止页面动态添加数据刷新后数据丢失
2017/03/10 Javascript
NodeJS处理Express中异步错误
2017/03/26 NodeJs
jQuery滚动插件scrollable.js用法分析
2017/05/25 jQuery
EasyUI的DataGrid每行数据添加操作按钮的实现代码
2017/08/22 Javascript
javascript高仿热血传奇游戏实现代码
2018/02/22 Javascript
vue.js计算属性computed用法实例分析
2018/07/06 Javascript
详解处理Vue单页面应用SEO的另一种思路
2018/11/09 Javascript
Vuex的实战使用详解
2019/10/31 Javascript
Python 模板引擎的注入问题分析
2017/01/01 Python
Pandas Shift函数的基础入门学习笔记
2018/11/16 Python
PyCharm 2020 激活到 2100 年的教程
2020/03/25 Python
移动端解决悬浮层(悬浮header、footer)会遮挡住内容的3种方法
2015/03/27 HTML / CSS
绩效专员岗位职责
2013/12/02 职场文书
大学本科毕业生求职信范文
2013/12/18 职场文书
周年庆典邀请函范文
2014/01/24 职场文书
《童年》教学反思
2014/02/18 职场文书
新春寄语大全
2014/04/09 职场文书
《诚实与信任》教学反思
2014/04/10 职场文书
财务管理专业毕业生求职信
2014/06/02 职场文书
2014预备党员党课学习心得范文
2014/07/08 职场文书
小学竞选班干部演讲稿
2014/08/20 职场文书
物业公司管理制度
2015/08/05 职场文书
动态规划之使用备忘录来改进Javascript函数
2022/04/07 Javascript