Flask是一个用Python编写的轻量级Web应用框架。它被称为"微框架"(microframework),因为它核心简单但可扩展性强,不强制使用特定的项目结构或库。Flask由Armin Ronacher开发,基于Werkzeug WSGI工具包和Jinja2模板引擎构建。
安装Flask非常简单,只需要使用pip:
pip install flask
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
将这段代码保存为app.py
并运行,访问http://127.0.0.1:5000/
就能看到"Hello, World!"的响应。
Flask使用@app.route()
装饰器来定义路由:
@app.route('/user/' )
def show_user_profile(username):
return f'User {username}'
@app.route('/post/' )
def show_post(post_id):
return f'Post {post_id}'
支持的类型转换器:
string
:(默认)接受任何不包含斜杠的文本int
:接受正整数float
:接受正浮点数path
:类似string但包含斜杠uuid
:接受UUID字符串Flask提供了request
对象来访问请求数据:
from flask import request
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return f"User {request.form['username']} logged in"
else:
return '''
'''
Flask允许你灵活控制响应:
from flask import make_response
@app.route('/custom-response')
def custom_response():
response = make_response('Custom Response')
response.headers['X-Custom-Header'] = 'Value'
response.status_code = 201
return response
使用Jinja2模板引擎:
from flask import render_template
@app.route('/hello/' )
def hello(name):
return render_template('hello.html', name=name)
对应的templates/hello.html
:
doctype html>
<title>Hellotitle>
{% if name %}
<h1>Hello {{ name }}!h1>
{% else %}
<h1>Hello World!h1>
{% endif %}
Flask自动配置静态文件路由,只需将文件放在static/
目录下:
<img src="{{ url_for('static', filename='image.jpg') }}">
from flask import session
app.secret_key = 'your-secret-key'
@app.route('/set-session')
def set_session():
session['username'] = 'admin'
return 'Session set'
@app.route('/get-session')
def get_session():
return session.get('username', 'Not set')
Flask的强大之处在于其丰富的扩展生态系统:
一个典型的Flask项目结构:
/myflaskapp
/app
/templates
base.html
index.html
/static
/css
/js
/images
/models
__init__.py
user.py
/views
__init__.py
auth.py
main.py
__init__.py
config.py
/migrations
/tests
__init__.py
test_basic.py
requirements.txt
run.py
特性 | Flask | Django |
---|---|---|
类型 | 微框架 | 全栈框架 |
灵活性 | 高 | 较低 |
学习曲线 | 平缓 | 较陡峭 |
内置功能 | 少,但可扩展 | 多,包含ORM、Admin等 |
适用场景 | 小型应用、API、微服务 | 大型复杂应用 |
模板引擎 | Jinja2 | Django模板 |
ORM | 无内置,常用SQLAlchemy扩展 | 内置强大ORM |
常见的Flask部署方式:
开发服务器:仅用于开发
flask run
生产服务器:
使用Gunicorn部署示例:
gunicorn -w 4 -b 127.0.0.1:8000 app:app
Flask以其简洁、灵活的特性成为Python Web开发的热门选择。它适合从小型项目到大型应用的开发,通过丰富的扩展可以满足各种需求。虽然学习Flask本身很简单,但要构建健壮的生产级应用,还需要掌握其生态系统和最佳实践。
作为初学者,flask更为友好,如果想继续学习,我将会持续推出更深入的知识。