您的位置:首页 > 其它

熟悉Flask框架------第二天(访问请求数据、Cookies、Session、重定向、关于响应)

2017-11-24 00:00 691 查看
摘要: 基本算是Python入门完成之后,
Flask又向前跨了一大步,
加油加油,下一步,先写一个简单的登录,
vue+flask-----------------------------------------------------------------------------------------------------成长的路上我会越来越好。

http://docs.jinkan.org/docs/flask/quickstart.html

6.访问请求数据

对于Web应用,在Flask中由全局的request对象提供与客户端发送给服务器的数据交互信息

(1)环境局部变量~~~~~~~~~跳过

(2)请求对象

from flask import request       # 从flask模块里导入它

# -*- coding: utf-8 -*-

from flask import Flask, render_template, request
app = Flask(__name__)

@app.route('/login', methods=['POST', 'GET'])
def login():
error = None
if request.method == 'POST':
if request.form['username'] != '':
return request.form['username']
else:
error = 'Invalid username/password'
# the code below is executed if the request method
# was GET or the credentials were invalid
return render_template('login.html', error=error)

if __name__ == '__main__':
app.run(debug=True)

(3)文件上传

# -*- coding: utf-8 -*-

from flask import Flask, request
from werkzeug import secure_filename    # 不知道为啥这里报错
app = Flask(__name__)

@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
f = request.files['the_file']
f.save('./files/' + secure_filename(f.filename))

if __name__ == '__main__':
app.run(debug=True)

(4)Cookies

1)读取Cookies

# -*- coding: utf-8 -*-

from flask import Flask, request
app = Flask(__name__)

@app.route('/')
def index():
username = request.cookies.get('username')      # 获取Cookies
return username

if __name__ == '__main__':
app.run(debug=True)

2)存储Cookies

# -*- coding: utf-8 -*-

from flask import Flask, request, make_response, render_template
app = Flask(__name__)

@app.route('/')
def index():
resp = make_response(render_template('login.html'))
resp.set_cookie('username', 'the username')     # 设置Cookies
return resp

if __name__ == '__main__':
app.run(debug=True)

7.重定向和错误

(1)重定向:用redirect()函数把用户重定向到其他地方

# -*- coding: utf-8 -*-

from flask import Flask, request, make_response, render_template, abort, redirect, url_for
app = Flask(__name__)

@app.route('/')
def index():
return redirect(url_for('login'))       # http://127.0.0.1:5000/---------->http://127.0.0.1:5000/login 
@app.route('/login')
def login():
return "hello world"

if __name__ == '__main__':
app.run(debug=True)

(2)错误:用abort()函数放弃请求并返回错误代码

返回Not Found

# -*- coding: utf-8 -*-

from flask import Flask, request, make_response, render_template, abort, redirect, url_for
app = Flask(__name__)

@app.route('/')
def index():
return redirect(url_for('login'))       # http://127.0.0.1:5000/---------->http://127.0.0.1:5000/login 
@app.route('/login')
def login():
abort(404)

if __name__ == '__main__':
app.run(debug=True)

使用errorHandler()定制错误页面

# -*- coding: utf-8 -*-

from flask import Flask, request, make_response, render_template, abort, redirect, url_for
app = Flask(__name__)

@app.route('/')
def index():
return redirect(url_for('login'))       # http://127.0.0.1:5000/---------->http://127.0.0.1:5000/login 
@app.route('/login')
@app.errorhandler(404)      # 使用errorHandler()定制错误页面
def login():
return render_template('error.html'), 404

if __name__ == '__main__':
app.run(debug=True)

8.关于响应

Flask把返回值转换为响应对象的逻辑:

(1)一个合法的响应对象,从视图直接返回

(2)一个字符串,响应对象会用字符串数据和默认参数创建

(3)一个元组,(response, status, headers)

(4).(1)(2)(3)不合适的时候,Flask假设返回值是一个合法的WSGI应用程序,并转换为一个请求对象

# -*- coding: utf-8 -*-

from flask import Flask, request, make_response, render_template, abort, redirect, url_for
app = Flask(__name__)

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

if __name__ == '__main__':
app.run(debug=True)

9.会话:session对象

# -*- coding: utf-8 -*-

from flask import Flask, session, redirect, url_for, escape, request
app = Flask(__name__)

# 一开始访问http://127.0.0.1:5000/,页面上显示You are not logged in
@app.route('/')
def index():
if 'username' in session:
return 'Logged in as %s' % escape(session['username'])
return 'You are not logged in'

# 访问http://127.0.0.1:5000/login,输入yj,点击Login按钮,登录成功,页面跳转到index页面//127.0.0.1:5000/,页面显示Logged in as
@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>
'''

# 访问http://127.0.0.1:5000/logout,页面跳转到index页面,页面显示You are not logged in
@app.route('/logout')
def logout():
# remove the username from the session if it's there
session.pop('username', None)
return redirect(url_for('index'))

# set the secret key.  keep this really secret:
app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'

if __name__ == '__main__':
app.run(debug=True)

10.消息闪现

简单地给用户反馈

通常会在请求结束时记录信息,并在下一个请求中访问记录的信息,展现信息通常要结合模板布局

flash()可以闪现一条消息

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