什么是Flask?

用于搭建Web应用的微框架。说其“微”,是指其核心足够简单,可扩展,与Django的理念相反。

(web development, one drop at a time  vs  the web framwork for perfectionists with deadlines)

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

只要创建好app,做好路由映射(基于装饰器),马上就可以让Flask运转起来

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()

 

访问本机的5000端口,就能看到结果。

功能初探

可定义多映射

@app.route('/index')
@app.route('/')
def index():
    return “home page“

可定义访问方法,参数和参数类型,

@app.route('/profile/<int:uid>', methods=['GET', 'POST'])
def profile(uid):
    return "profile", str(uid)

获得请求信息,定义响应信息

from flask import make_response, request

@app.route('/request')
def request_demo():
    res = ''
    key = request.args.get('demo_key', 'default_value')
    res = res + request.url + '++' + request.path + '<br>'
    for property in dir(request):
        res = res + str(property) + '|==|<br>' + str(eval('request.' + property)) + '<br>'
    response = make_response(res)
    response.set_cookie('cookie_key', key)
    response.status = '404'
    response.headers['header_key'] = 'header_value'
    return response

重定向和处理错误

from flask import redirect

@app.route('/redirect_target')
def redirected():
    return 'target'


@app.route('/from_here')
def redirect_demo(code):
    return redirect('/redirect-target')


@app.errorhandler(404)
def page_not_found(error):
    return render_template('not_found.html')

在前后请求之前传递信息,有消息闪现(Message Flashing)机制

from flask import flash, get_flashed_messages

@app.route('/login')
def login():
    # 每登录一次都为把消息压入消息队列中,首页的提示信息会一直增加
    flash('登录成功')
    return 'ok'


@app.route('/')
def index():
    res = ''
    for msg in get_flashed_messages():
        res = res + msg + '<br>'
    return res

Jinja2模板

{% extends "base.html" %}

<title>{% block title %}{% endblock %}</title>
<ul>
{% for user in users %}
  <li><a href="{{ user.url }}">{{ user.username }}</a></li>
{% endfor %}
</ul>

可安装flask_script模块为Flask编写外部脚本,方便进行调试和管理

from flask_script import Manager
from demo import app

manager = Manager(app)


@manager.command
def hello(name):
    print('hello', name)


@manager.command
def initialize_database():
    """initialize database"""
    print('database started.')


if __name__ == '__main__':
  # 默认有runserver命令,启动server manager.run()
python manage.py hello demo
python manage.py initialize_database
python manage.py runserver

 

参考资料:

http://flask.pocoo.org/docs/1.0/

http://jinja.pocoo.org/docs/2.10/

https://flask-script.readthedocs.io/en/latest/

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄