Flask:一个轻量级神奇的Python Web框架

大家好啊!今天我要和大家分享一个特别有意思的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 '这是个人主页,需要登录才能访问'

小贴士:

  1. Flask的扩展生态特别丰富,几乎能找到所有你需要的功能

  2. 项目结构要根据规模合理组织,可以使用蓝图(Blueprint)

  3. 配置信息最好放在单独的配置文件中

  4. 善用虚拟环境管理依赖

实战小练习:

  1. 创建一个简单的待办事项应用

  2. 实现一个带用户注册登录的博客系统

  3. 开发一个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学习节节高!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值