大家好啊!今天我要和大家分享一个特别有意思的Python Web框架——Flask。它就像是一个"迷你版"的Django,简单、灵活、易上手。如果说Django是一把瑞士军刀,那Flask就是一把小巧精致的水果刀。它不会给你太多预设的结构和限制,而是让你根据需求自由发挥。让我们一起来探索这个充满魔法的微框架吧!
1. Flask快速入门
首先,我们需要安装Flask:
# 安装Flask
pip install flask
# 创建第一个Flask应用
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, Flask!'
if __name__ == '__main__':
app.run(debug=True)
就这么简单几行代码,一个Web应用就诞生了!运行后访问http://localhost:5000就能看到结果。
小贴士:debug=True能让我们在开发时实时看到修改效果,但在生产环境一定要关闭它!
2. 路由系统:处理不同的URL
Flask的路由系统非常灵活,我们可以轻松处理各种URL模式:
from flask import Flask
app = Flask(__name__)
# 基本路由
@app.route('/hello')
def hello():
return 'Hello, World!'
# 带变量的路由
@app.route('/user/<username>')
def show_user(username):
return f'User: {username}'
# 指定HTTP方法
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return 'Processing login...'
return 'Please login'
3. 模板渲染:让页面更漂亮
Flask使用Jinja2模板引擎,可以轻松创建动态网页:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/posts')
def show_posts():
posts = [
{'title': 'Flask入门', 'author': 'Alice'},
{'title': 'Python技巧', 'author': 'Bob'}
]
return render_template('posts.html', posts=posts)
在templates/posts.html中:
{% raw %}
<!DOCTYPE html>
<html>
<head>
<title>博客文章</title>
</head>
<body>
<h1>文章列表</h1>
{% for post in posts %}
<div class="post">
<h2>{{ post.title }}</h2>
<p>作者:{{ post.author }}</p>
</div>
{% endfor %}
</body>
</html>
{% endraw %}
4. 请求和响应:处理用户数据
from flask import request, jsonify
@app.route('/api/submit', methods=['POST'])
def submit_data():
data = request.json # 获取JSON数据
# 处理数据
return jsonify({'status': 'success', 'data': data})
# 文件上传
@app.route('/upload', methods=['POST'])
def upload_file():
if 'file' not in request.files:
return 'No file part'
file = request.files['file']
if file.filename == '':
return 'No selected file'
if file:
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return 'File uploaded successfully'
5. 数据库操作:Flask-SQLAlchemy
Flask可以通过扩展来增强功能,比如Flask-SQLAlchemy:
from flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db'
db = SQLAlchemy(app)
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False)
content = db.Column(db.Text, nullable=False)
def __repr__(self):
return f'<Post {self.title}>'
# 创建数据库表
with app.app_context():
db.create_all()
6. 用户认证:Flask-Login
from flask_login import LoginManager, UserMixin, login_required
login_manager = LoginManager()
login_manager.init_app(app)
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
password = db.Column(db.String(120))
@login_required
@app.route('/profile')
def profile():
return '这是个人主页,需要登录才能访问'
小贴士:
-
Flask的扩展生态特别丰富,几乎能找到所有你需要的功能
-
项目结构要根据规模合理组织,可以使用蓝图(Blueprint)
-
配置信息最好放在单独的配置文件中
-
善用虚拟环境管理依赖
实战小练习:
-
创建一个简单的待办事项应用
-
实现一个带用户注册登录的博客系统
-
开发一个RESTful API接口
注意事项:
-
记得处理错误和异常
-
注意防范XSS和CSRF攻击
-
敏感信息要加密存储
-
大型项目建议使用工厂模式创建应用
7. 项目实例:迷你博客
from flask import Flask, render_template, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///miniblog.db'
db = SQLAlchemy(app)
class BlogPost(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100))
content = db.Column(db.Text)
date_posted = db.Column(db.DateTime, default=datetime.utcnow)
@app.route('/')
def index():
posts = BlogPost.query.order_by(BlogPost.date_posted.desc()).all()
return render_template('index.html', posts=posts)
@app.route('/post/new', methods=['GET', 'POST'])
def new_post():
if request.method == 'POST':
post = BlogPost(
title=request.form['title'],
content=request.form['content']
)
db.session.add(post)
db.session.commit()
return redirect(url_for('index'))
return render_template('create.html')
小伙伴们,今天的Python学习之旅就到这里啦!记得动手敲代码,有问题随时在评论区问我哦。祝大家学习愉快,Python学习节节高!