Flask是一个轻量级的Python Web框架,基于Werkzeug和Jinja2,它旨在让Web应用程序的开发变得简单而快速。Flask没有过多的强制性约定,使得开发者可以自由选择工具和库来构建应用。
安装Flask:
bashpip install Flask
Flask应用的初始化非常简单,首先导入Flask类,并实例化一个Flask应用对象。
pythonfrom flask import Flask
app = Flask(__name__)
if __name__ == "__main__":
app.run(debug=True)
Flask(__name__): 创建Flask应用实例,__name__告诉Flask在哪里查找静态文件和模板。app.run(debug=True): 启动Flask应用,debug=True开启调试模式,可以在代码修改后自动重启应用。Flask通过装饰器将URL和视图函数绑定在一起,最常用的装饰器是@app.route()。
python@app.route('/')
def hello_world():
return 'Hello, World!'
可以在路由中传递参数:
python@app.route('/hello/<name>')
def hello_name(name):
return f'Hello, {name}!'
默认情况下,Flask路由只处理GET请求。如果需要处理其他HTTP方法(如POST),可以通过methods参数指定。
python@app.route('/submit', methods=['POST'])
def submit_form():
return 'Form submitted!'
Flask使用Jinja2模板引擎来渲染HTML模板。
pythonfrom flask import render_template
@app.route('/hello/<name>')
def hello_name(name):
return render_template('hello.html', name=name)
render_template('hello.html', name=name)会加载hello.html模板并将变量name传入。hello.html模板html<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello {{ name }}</title>
</head>
<body>
<h1>Hello, {{ name }}!</h1>
</body>
</html>
Flask自动为静态文件(如CSS、JavaScript和图片)提供支持。静态文件通常存放在static文件夹中。
python# 访问静态文件:/static/style.css
Flask通过request对象处理请求数据,获取URL参数、表单数据、JSON数据等。
pythonfrom flask import request
@app.route('/user')
def user():
user_id = request.args.get('id') # 获取URL参数,如/user?id=123
return f'User ID: {user_id}'
python@app.route('/login', methods=['POST'])
def login():
username = request.form['username']
password = request.form['password']
return f'Username: {username}, Password: {password}'
python@app.route('/api', methods=['POST'])
def api():
data = request.get_json() # 获取JSON数据
return f'Received data: {data}'
Flask允许你创建自定义响应对象。
pythonfrom flask import make_response
@app.route('/custom_response')
def custom_response():
response = make_response('Hello, Custom Response')
response.headers['X-Custom-Header'] = 'Value'
return response
Flask有内置的支持来管理Cookie和Session。
pythonfrom flask import make_response
@app.route('/set_cookie')
def set_cookie():
resp = make_response('Cookie Set')
resp.set_cookie('username', 'admin')
return resp
pythonfrom flask import request
@app.route('/get_cookie')
def get_cookie():
username = request.cookies.get('username')
return f'Username from Cookie: {username}'
Flask使用session对象来管理用户会话,默认情况下,Flask会话数据存储在加密的cookie中。
pythonfrom flask import session
app.secret_key = 'your_secret_key' # 设置密钥用于加密Session数据
@app.route('/set_session')
def set_session():
session['user'] = 'admin'
return 'Session Set'
@app.route('/get_session')
def get_session():
user = session.get('user', 'Guest')
return f'Logged in as {user}'
Flask没有内建的权限控制机制,但可以通过Flask扩展或自定义装饰器来实现权限管理。
创建一个装饰器来检查用户是否登录。
pythonfrom functools import wraps
from flask import redirect, url_for, session
def login_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if 'user' not in session:
return redirect(url_for('login'))
return f(*args, **kwargs)
return decorated_function
使用@login_required装饰器保护需要登录的视图:
python@app.route('/dashboard')
@login_required
def dashboard():
return 'Welcome to the Dashboard'
可以通过定义不同角色来限制某些路由的访问权限。
python@app.route('/admin')
@login_required
def admin():
if session.get('role') != 'admin':
return 'Access Denied', 403
return 'Welcome Admin'
测试环境中可以直接运行app.py文件
生产环境中通常需要使用更强大的服务器(如Gunicorn、uWSGI)。
bash# 使用Gunicorn运行
gunicorn -w 4 app:app
本文作者:晏秋
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!