Flask 路由相关操作
URL Route
- URL 后接
/
作为目录级访问 - URL 后不接
/
作为文件级访问
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Index Page'
@app.route('/about')
def about():
return 'The about page'
type:XXX | 说明 |
---|---|
string | (default) accepts any text without a slash |
int | accepts positive integers |
float | accepts positive floating point values |
path | like string but also accepts slashes |
uuid | accepts UUID strings |
from flask import Flask
app = Flask(__name__)
@app.route('/user/<username>')
def show_user_profile(username):
# show the user profile for that user
return 'User %s' % username
@app.route('/post/<int:post_id>')
def show_post(post_id):
# show the post with the given id, the id is an integer
return 'Post %d' % post_id
@app.route('/path/<path:subpath>')
def show_subpath(subpath):
# show the subpath after /path/
return 'Subpath %s' % subpath
- 可以使用
methods
来指定该路由使用的HTTP方法。
from flask import request
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return do_the_login()
else:
return show_the_login_form()
参考
URL Binding
使用
url_for()
方法可以调用参数中的route
方法,以便满足某种调用目的,如单元测试。
from flask import Flask
from flask import Flask, url_for
app = Flask(__name__)
with app.test_request_context():
print(url_for('index'))
print(url_for('login'))
print(url_for('login', next='/'))
print(url_for('profile', username='John Doe'))
静态文件伺候
静态文件指应用使用的
Javascript
、CSS
代码及图片资源文件。
- 在项目根目录下创建
static
目录
url_for('static', filename='style.css')
模板文件伺候
Flask会自动寻找
templates
目录,所以原则上请不要自定义这个目录的名字,且应该将其放在项目(或模块)的根路径下。
from flask import Flask
from flask import render_template
app = Flask(__name__)
@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
return render_template('hello.html', name=name)
<body>
Hello, World!
from templates
</body>
参考
请求处理
Request
@app.route('/test', methods=['POST', 'GET'])
def test():
error = None
if request.method == 'POST':
t1 = request.form['1']
t2 = request.form['2']
elif request.method == 'GET':
# for URL `?key=value`
t3 = request.args.get('key', '')
else:
error = 'Method is not POST or GET!'
return render_template('test.html', error=error)
参考
文件上传
- 保存时重新指定文件名
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')
...
- 保存时,使用上传的文件名
from flask import request
from werkzeug.utils 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))
...
参考
Cookies
- 读取
cookie
from flask import request
@app.route('/')
def index():
username = request.cookies.get('username')
# use cookies.get(key) instead of cookies[key] to not get a
# KeyError if the cookie is missing.
- 写入
cookie
from flask import make_response
@app.route('/')
def index():
resp = make_response(render_template(...))
resp.set_cookie('username', 'the username')
return resp
重定向
- 使用
url_for
来找到URL地址 - 使用
redirect
来重定向
from flask import abort, redirect, url_for
@app.route('/')
def index():
return redirect(url_for('login'))
- 使用
abort
来返回错误码
@app.route('/login')
def login():
abort(401)
this_is_never_executed()
- 使用
@app.errorhandler()
来处理错误码对应的请求
from flask import render_template
@app.errorhandler(404)
def page_not_found(error):
return render_template('page_not_found.html'), 404
参考
版权声明:
作者:莫不逢
出处:http://www.cnblogs.com/sitemanager/
Github:https://github.com/congjf
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。