专栏名称: 机器学习算法与Python实战
长期跟踪关注统计学、数据挖掘、机器学习算法、深度学习、人工智能技术与行业发展动态,分享Python、机器学习等技术文章。回复机器学习有惊喜资料。
目录
相关文章推荐
南方能源观察  ·  荆朝霞:南方区域市场是探索建设全国统一电力市 ... ·  9 小时前  
南方能源观察  ·  新型储能装机全国竞技,内蒙古领先 ·  昨天  
南方能源观察  ·  《南方能源观察》电子刊上线!订阅方式戳→ ·  2 天前  
南方能源观察  ·  《南方能源观察》电子刊上线!订阅方式戳→ ·  3 天前  
南方能源观察  ·  德国能源转型:政策调整前夜 ·  3 天前  
51好读  ›  专栏  ›  机器学习算法与Python实战

Python高级编程:web开发之Flask

机器学习算法与Python实战  · 公众号  ·  · 2025-01-04 10:32

正文

1. Flask 简介

Flask 是一个轻量级的 Python Web 应用框架,被称为"微框架"(micro-framework)。它基于 Werkzeug WSGI 工具包和 Jinja2 模板引擎,提供了 Web 开发所需的核心功能,同时保持了高度的灵活性和扩展性。

1.1 Flask 的特点

  • 轻量级 : 核心简单但是扩展性强
  • 灵活性 : 不强制特定的项目布局或依赖
  • 容易上手 : 简单的 API 设计,清晰的文档
  • 强大的扩展生态 : 丰富的第三方扩展支持
  • 活跃的社区 : 持续的维护和更新

1.2 安装 Flask

pip install flask

2. Flask 基础

2.1 第一个 Flask 应用

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run(debug=True)

2.2 路由系统

2.2.1 基本路由

@app.route('/user')
def user_page():
    return 'User Page'

2.2.2 动态路由

@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}'

2.2.3 HTTP 方法

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        return 'Processing login...'
    return 'Please login'

3. 模板引擎(Jinja2)

3.1 基本用法

from flask import render_template

@app.route('/hello/')
def hello(name):
    return render_template('hello.html', name=name)

模板文件 hello.html :

html>
<html>
<head>
    <title>Hello Pagetitle>
head>
<body>
    <h1>Hello {{ name }}!h1>
body>
html>

3.2 模板语法

3.2.1 变量

{{ variable }}

3.2.2 控制结构

{% if user %}
    Hello, {{ user }}!
{% else %}
    Hello, Stranger!
{% endif %}

{% for item in items %}
    <li>{{ item }}li>
{% endfor %}

4. 表单处理

4.1 基本表单

from flask import request

@app.route('/submit', methods=['GET', 'POST'])
def submit():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        return f'Received: {username}'
    return '''
        

            
            
            
        

    '''

4.2 Flask-WTF 表单

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired

class LoginForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired()])
    password = PasswordField('Password', validators=[DataRequired()])
    submit = SubmitField('Login')

5. 数据库集成

5.1 Flask-SQLAlchemy

from flask_sqlalchemy import SQLAlchemy

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

6. 用户认证

6.1 Flask-Login

from flask_login import LoginManager, UserMixin, login_user, login_required

login_manager = LoginManager()
login_manager.init_app(app)

class User(UserMixin, db.Model):
    # 用户模型定义
    pass

@login_manager.user_loader
def load_user(user_id):
    return User.query.get(int(user_id))

@app.route('/protected')
@login_required
def protected():
    return 'Protected area'

7. RESTful API 开发

7.1 基本 REST API

@app.route('/api/users', methods=['GET'])
def get_users():
    users = User.query.all()
    return jsonify([{'id': user.id, 'username': user.username} for user in users])

@app.route('/api/users/', methods=['GET'])
def get_user(user_id):
    user = User.query.get_or_404(user_id)
    return jsonify({'id': user.id, 'username': user.username})

7.2 Flask-RESTful

from flask_restful import Resource, Api

api = Api(app)

class UserResource(Resource):
    def get(self, user_id):
        user = User.query.get_or_404(user_id)
        return {'id': user.id, 'username': user.username}

api.add_resource(UserResource, '/api/users/')

8. 项目结构

推荐的项目结构:

myproject/
    ├── app/
    │   ├── __init__.py
    │   ├── models.py
    │   ├── routes.py
    │   └── templates/
    ├── config.py
    ├── requirements.txt
    └── run.py

9. 部署

9.1 生产环境配置

# config.py
class ProductionConfig:
    DEBUG = False
    SQLALCHEMY_DATABASE_URI = 'postgresql://user:password@localhost/dbname'
    SECRET_KEY = 'your-secret-key'

9.2 使用 Gunicorn 部署

pip install gunicorn
gunicorn -w 4 -b 127.0.0.1:8000 run:app

10. 最佳实践







请到「今天看啥」查看全文