最近公司用flask,就一边用一边学,看到有什么有意思的就记录一下
2018年01月15日20:55:36
今天还好,下午把功能简单提交了之后就没什么棘手的事了,所以有空看看flask的文档
- 关于flask的请求,有这么几个参数,其实和Django也差不多
from flask import request
request.method # 请求方法
request.form.get('name') # 获取表单属性
request.args.get('name') # 获取参数
request.file['the_file'] # 获取文件对象,前端要设置这个属性才行,enctype="multipart/form-data"
还有request.path # 获取请求的路径
- cookie
可以从request中读取,
request.cookie.get('name')
如果要设置cookie,可以通过make_response 来操作
from flask import make_response
@app.route('/')
def index():
resp = make_response(render_template(...))
resp.set_cookie('username', 'the username')
return resp
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
- 看到一个有趣的东西,abort函数
直接在试图函数中写:abort(404)
就会返回404页面,你可以试试看不同的状态码分别是什么页面
默认情况下,错误代码会显示一个黑白的错误页面。如果你要定制错误页面, 可以使用errorhandler
装饰器:
from flask import render_template
@app.errorhandler(404)
def page_not_found(error):
return render_template('page_not_found.html'), 404
注意这个404,如果不写,默认是200的
- 生成一个随机码
又从文档中看到一个有趣的东西,os模块可以帮我们随机生成一个字符串
>>> import os
>>> os.urandom(22)
'\x0f[bU\xbfh\r\x13\xc8\xb5h\xb5?s\x95^@\xf9G\t\xac\x17'
5.会话
flask给我们提供了session,来保持会话,当然还有g对象,先来看一下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>
'''
@app.route('/logout')
def logout():
# remove the username from the session if it's there
session.pop('username', None) # 这样就可以退出登录了
return redirect(url_for('index'))
6.闪现
这个东西怎么说呢,大概意思就是说快速的返回给用户一些消息,用法是这样的:
视图函数:
from flask import Flask, flash, redirect, render_template,request, url_for,abort
app = Flask(__name__)
app.secret_key = 'some_secret'
@app.route('/')
def index():
return render_template('index.html')
@app.route('/login', methods=['GET', 'POST'])
def login():
error = None
if request.method == 'POST':
if request.form['user'] != 'admin' or \
request.form['pwd'] != 'secret':
error = 'Invalid credentials'
else:
flash('You were successfully logged in')
return redirect(url_for('index'))
return render_template('login.html', error=error)
if __name__ == "__main__":
app.run()
注意前端代码要加上这个get_flashed_messages()
才能在页面中打印出闪现的消息,看示例:
index页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>INDEX</h1>
{% for message in get_flashed_messages() %}
{{ message }}
{% endfor %}
</body>
</html>
当登录时输入正确的用户名和密码,就会跳转到index页面,此时页面上会有一条消息,就是在代码中设置的闪现消息,当再次刷新,消息就会消失
- 反向生成url,
url_for
方法
这个东西其实还挺好用的,前端页面和后端程序都能用
看这两个例子
视图函数中从flask中导入url_for
return redirect(url_for('index'))
前端页面中要用{{}}
<p>Do you want to <a href="{{ url_for('login') }}">log in?</a>