您的位置:首页 > 其它

访问请求数据

2017-09-09 22:23 183 查看

1.请求对象

通过get和post方法,接受用户的请求信息。

WSGI服务器转发的http请求数据,Flask框架会将其封装为一个Request类的实例。Request实例对象中包含 了关于一次HTTP请求的一切信息,常用的属性包括:

  • form - 记录请求中的表单数据。类型:MultiDict

  • args - 记录请求中的查询参数。类型:MultiDict

  • cookies - 记录请求中的cookie。类型:Dict

  • headers - 记录请求中的报文头。类型:EnvironHeaders

  • method - 记录请求使用的HTTP方法:GET/POST/PUT....。类型:string

  • environ - 记录WSGI服务器转发的环境变量。类型:Dict

  • url - 记录请求的URL地址。类型:string

ps: 文件上传:   首先的模版页面中设置属性  enctype="multipart/form-data";   已上传的文件存储在内存或是文件系统中一个临时的位置。你可以通过请求对象的 files属性访问它们。每个上传的文件都会存储在这个字典里。它表现近乎为一个标准的 Python file 对象,但它还有一个 save() 方法,这个方法允许你把文件保存到服务器的文件系统上;       最后你要把文件按客户端提供的文件名存储在服务器上,那么请把它传递给 Werkzeug 提供的 secure_filename() 函数。      
from flask import request,render_template,redirect,url_for
from werkzeug import secure_filename
from myapp import app
import os

UPLOAD_FOLDER = 'tmp/'
app.config['UPLOAD_FOLDER']=UPLOAD_FOLDER
@app.route('/upload',methods=['GET','POST'])
def upload():
if request.method=='POST':
f=request.files['file']
filename=secure_filename(f.filename)
f.save(os.path.join(app.config['UPLOAD_FOLDER'],filename))
return redirect(url_for('index'))
return render_template('upload.html')
@app.route('/index')
def index():
return render_template('index.html')

2.重定向和错误

  你可以用 redirect() 函数把用户重定向到其它地方。放弃请求并返回错误代码,用abort() 函数。

如果你要定制错误页面, 可以使用errorhandler() 装饰器:

from flask import render_template
@app.errorhandler(404) def page_not_found(error): return render_template('page_not_found.html'), 404

 ps:注意 render_template() 调用之后的 404 。这告诉 Flask,该页的错误代码是 404 ,即没有找到。默认为 200,也就是一切正常。

3.响应对象

  视图函数的返回值会被自动转换为一个响应对象。Flask 把返回值转换为响应对象的逻辑是这样:

  1. 如果返回的是一个合法的响应对象,它会从视图直接返回。
  2. 如果返回的是一个字符串,响应对象会用字符串数据和默认参数创建。
  3. 如果返回的是一个元组,且元组中的元素可以提供额外的信息。这样的元组必须是(response, status, headers) 的形式,且至少包含一个元素。 status 值会覆盖状态代码, headers 可以是一个列表或字典,作为额外的消息标头值。
  4. 如果上述条件均不满足, Flask 会假设返回值是一个合法的 WSGI 应用程序,并转换为一个请求对象。

  如果你想在视图里操纵上述步骤结果的响应对象,可以使用 make_response() 函数。

@app.errorhandler(404)
def not_found(error):
resp = make_response(render_template('error.html'), 404)
resp.headers['X-Something'] = 'A value'
return resp

4.会话

  除请求对象之外,还有一个 session 对象。它允许你在不同请求间存储特定用户的信息。它是在 Cookies 的基础上实现的,并且对 Cookies 进行密钥签名。这意味着用户可以查看你 Cookie 的内容,但却不能修改它,除非用户知道签名的密钥。

from flask import Flask, session, redirect, url_for, escape, request

app = Flask(__name__)
#首页判断session是否存在username
@app.route('/')
def index():
if 'username' in session:
return 'Logged in as %s' % escape(session['username'])
return 'You are not logged in'

#保存用户名到session
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
session['username'] = request.form['username']
return redirect(url_for('index'))
return '''
<form action="" method="post">
<p><input type=text name=username>
<p><input type=submit value=Login>
</form>
'''
#移除session里username
@app.route('/logout')
def logout():
session.pop('username', None)
return redirect(url_for('index'))

# 保存密钥
app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'

 

  

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐