• Flask框架学习大纲


    Flask 是一个微型的 web 框架,但它非常灵活,可以通过各种扩展和自定义实现许多高级功能。以下是一些示例及解析:

    1. 安装与基本设置
      安装Flask:

      pip install Flask
      
      • 1

      基本应用示例:

      from flask import Flask
      app = Flask(__name__)
      
      @app.route('/')
      def hello_world():
          return 'Hello, World!'
      
      if __name__ == '__main__':
          app.run()
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

      解析:这个例子创建了一个基本的Flask应用,并定义了一个路由,它在访问根URL(‘/’)时返回“Hello, World!”。

    2. 路由(Routes)
      示例:

      @app.route('/greet')
      def greet():
          return 'Hello, Flask User!'
      
      • 1
      • 2
      • 3

      解析:这个例子定义了一个新的路由“/greet”,当用户访问这个URL时,将返回“Hello, Flask User!”。

    3. 视图函数(View Functions)
      视图函数与路由一起定义,它返回一个响应。
      解析:在前面的例子中,hello_worldgreet函数就是视图函数,分别返回了不同的响应。

    4. 模板(Templates)
      示例:

      from flask import render_template
      
      @app.route('/template')
      def template():
          return render_template('template.html', variable='value')
      
      • 1
      • 2
      • 3
      • 4
      • 5

      解析:这里我们渲染一个名为’template.html’的模板,并传递了一个变量variable

    5. 静态文件(Static Files)
      Flask自动为应用的/static文件夹添加静态路由。
      解析:将CSS,JavaScript等静态文件放在应用的/static文件夹下,可以通过/static/filename来访问。
      存储示例:
      将一个样式表文件style.css存放在Flask应用目录下的static文件夹内。
      访问示例:

    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
    
    • 1

    解析:静态文件(例如样式表、图像、JavaScript文件等)通常存放在项目的static目录下。在模板或HTML文件中,可以使用url_for(‘static’, filename=‘filename’)的方式来生成静态文件的URL。

    1. 请求与响应对象(Request and Response Objects)
      示例:

      from flask import request
      
      @app.route('/login', methods=['POST'])
      def login():
          username = request.form['username']
          return 'User %s logged in' % username
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

      解析:这个例子中,我们从POST请求的表单数据中获取用户名。

    2. 错误处理(Error Handling)
      示例:

      @app.errorhandler(404)
      def page_not_found(e):
          return render_template('404.html'), 404
      
      • 1
      • 2
      • 3

      解析:这个例子自定义了404错误页面,返回一个特定的模板。

    3. 配置(Configuration)
      示例:

      app.config['DEBUG'] = True
      
      • 1

      解析:这里我们开启了Flask应用的调试模式。

    4. 会话(Sessions)
      示例:

      from flask import session
      
      @app.route('/setuser/')
      def setuser(username):
          session['username'] = username
          return 'User set to %s' % username
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

      解析:这个例子设置了一个会话变量username

    5. 蓝图(Blueprints)
      示例:

      from flask import Blueprint
      mod = Blueprint('mod', __name__)
      
      @mod.route('/mod_route')
      def mod_route():
          return 'This is a route in a blueprint'
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

      解析:这里我们创建了一个蓝图,并在蓝图中定义了一个路由。

    6. 扩展(Extensions)
      示例(以Flask-SQLAlchemy为例):

      pip install Flask-SQLAlchemy
      
      • 1
      from flask_sqlalchemy import SQLAlchemy
      app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:tmp/test.db'
      db = SQLAlchemy(app)
      
      • 1
      • 2
      • 3

      解析:这个例子展示了如何安装和配置Flask-SQLAlchemy扩展。
      是的,Flask框架虽然简单,但它提供了用于构建高级功能的扩展和工具。下面是一些使用Flask实现高级功能的实例:

    7. 用户认证
      Flask-Login扩展可以帮助处理用户认证。
      示例:

    pip install Flask-Login
    
    • 1
    from flask_login import LoginManager
    
    login_manager = LoginManager()
    login_manager.init_app(app)
    
    @login_manager.user_loader
    def load_user(user_id):
        return User.get(user_id)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    解析:Flask-Login扩展用于处理用户会话,示例中的load_user函数是用户会话管理的重要部分,它从数据库中加载用户。

    1. 数据库操作
      Flask-SQLAlchemy扩展可以帮助进行数据库操作。
      示例:
    pip install Flask-SQLAlchemy
    
    • 1
    from flask_sqlalchemy import SQLAlchemy
    
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:tmp/test.db'
    db = SQLAlchemy(app)
    
    • 1
    • 2
    • 3
    • 4

    解析:示例中展示了如何配置Flask-SQLAlchemy扩展,并创建了一个SQLAlchemy对象db,该对象可以用于操作数据库。

    1. 表单处理
      Flask-WTF扩展可以帮助处理表单。
      示例:
    pip install Flask-WTF
    
    • 1
    from flask_wtf import FlaskForm
    from wtforms import StringField, PasswordField
    
    class LoginForm(FlaskForm):
        username = StringField('Username')
        password = PasswordField('Password')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    解析:示例中使用Flask-WTF扩展定义了一个登录表单,其中包含用户名和密码字段。

    1. RESTful API
      Flask-RESTful扩展可以帮助创建RESTful API。
      示例:
    pip install Flask-RESTful
    
    • 1
    from flask_restful import Api, Resource
    
    api = Api(app)
    
    class HelloWorld(Resource):
        def get(self):
            return {'hello': 'world'}
    
    api.add_resource(HelloWorld, '/api/hello')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    解析:示例中使用Flask-RESTful扩展创建了一个简单的RESTful API,该API有一个端点/api/hello,返回JSON响应。

    1. 文件上传
      Flask本身就支持文件上传。
      示例:
    from flask import request
    from werkzeug.utils import secure_filename
    
    @app.route('/upload', methods=['POST'])
    def upload_file():
        f = request.files['file']
        f.save(secure_filename(f.filename))
        return 'File uploaded successfully'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    解析:这个示例展示了如何使用Flask处理文件上传。用户通过POST请求上传文件,文件被保存到服务器的文件系统中。

    1. 错误日志记录
      Flask内建支持错误日志记录,你可以配置不同的日志记录器来记录错误信息。
    import logging
    from logging.handlers import RotatingFileHandler
    
    handler = RotatingFileHandler('error.log', maxBytes=10000, backupCount=3)
    handler.setLevel(logging.ERROR)
    app.logger.addHandler(handler)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    解析:该示例配置了一个RotatingFileHandler,用于记录错误信息到error.log文件中,文件大小限制为10000字节,保留3个备份。

    1. 缓存
      Flask-Caching扩展可以为应用添加缓存功能。
    pip install Flask-Caching
    
    • 1
    from flask_caching import Cache
    
    cache = Cache(app, config={'CACHE_TYPE': 'simple'})
    
    @app.route('/cached')
    @cache.cached(timeout=50)
    def cached_view():
        return 'This is a cached view'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    解析:该示例展示了如何使用Flask-Caching扩展为特定视图添加缓存,缓存类型为simple,超时时间为50秒。

    1. 任务队列
      使用Celery,你可以在Flask中处理后台任务。
    pip install celery
    
    • 1
    from celery import Celery
    
    def make_celery(app):
        celery = Celery(
            app.import_name,
            backend=app.config['CELERY_RESULT_BACKEND'],
            broker=app.config['CELERY_BROKER_URL']
        )
        celery.conf.update(app.config)
        return celery
    
    celery = make_celery(app)
    
    @celery.task
    def add(x, y):
        return x + y
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    解析:该示例展示了如何使用Celery在Flask应用中配置和定义后台任务。

    1. WebSocket
      Flask-SocketIO扩展提供了WebSocket的支持。
    pip install flask-socketio
    
    • 1
    from flask_socketio import SocketIO
    
    socketio = SocketIO(app)
    
    @socketio.on('message')
    def handle_message(message):
        print('received message: ' + message)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    解析:该示例展示了如何使用Flask-SocketIO处理WebSocket消息。

    1. 单元测试
      Flask内建支持单元测试,你可以很方便地为你的应用编写测试用例。

      import unittest
      
      class MyTestCase(unittest.TestCase):
      
          def setUp(self):
              app.testing = True
              self.app = app.test_client()
      
          def test_hello(self):
              rv = self.app.get('/')
              self.assertEqual(rv.data, b'Hello, World!')
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
    2. 国际化和本地化
      使用Flask-Babel扩展可以实现应用的国际化和本地化。

      pip install Flask-Babel
      
      • 1
      from flask_babel import Babel
      
      babel = Babel(app)
      
      @babel.localeselector
      def get_locale():
          return request.accept_languages.best_match(['zh_CN', 'en_US'])
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

      解析:该示例展示了如何使用Flask-Babel扩展实现语言的自动选择,这里设置了中文和英文两种语言。

    3. 全文搜索
      使用Flask-WhooshAlchemy扩展可以为SQLAlchemy模型添加全文搜索。

      pip install Flask-WhooshAlchemy
      
      • 1
      import flask_whooshalchemy as whooshalchemy
      
      class MyModel(db.Model):
          __searchable__ = ['name']  # 设置搜索字段
          id = db.Column(db.Integer, primary_key=True)
          name = db.Column(db.String(64))
      
      whooshalchemy.whoosh_index(app, MyModel)
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

      解析:该示例展示了如何使用Flask-WhooshAlchemy为模型添加全文搜索功能。

    4. 定时任务
      使用APScheduler可以在Flask中实现定时任务。

      pip install APScheduler
      
      • 1
      from apscheduler.schedulers.background import BackgroundScheduler
      
      scheduler = BackgroundScheduler()
      scheduler.add_job(func=my_task, trigger="interval", seconds=60)
      scheduler.start()
      
      • 1
      • 2
      • 3
      • 4
      • 5

      解析:该示例展示了如何使用APScheduler在Flask应用中添加定时执行的任务。

    5. API文档生成
      使用Flask-RESTPlus或Flask-RESTx可以快速生成API文档。

      pip install flask-restx
      
      • 1
      from flask_restx import Api, Resource
      
      api = Api(app)
      
      @api.route('/api/hello')
      class HelloWorld(Resource):
          def get(self):
              return {'hello': 'world'}
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

      解析:该示例展示了如何使用Flask-RESTx创建API,并自动生成文档。

    6. 图形验证
      使用Flask-Captcha可以为Flask应用生成图形验证。

      pip install Flask-Captcha
      
      • 1
      from flask_captcha import Captcha
      
      captcha = Captcha(app)
      
      • 1
      • 2
      • 3
    7. 跨域资源共享
      使用Flask-CORS扩展可以处理跨域资源共享。

      pip install Flask-CORS
      
      • 1
      from flask_cors import CORS
      
      CORS(app)
      
      • 1
      • 2
      • 3
    8. 邮件发送
      使用Flask-Mail扩展可以方便地发送邮件。

      pip install Flask-Mail
      
      • 1
      from flask_mail import Mail, Message
      
      mail = Mail(app)
      
      @app.route('/send-mail')
      def send_mail():
          msg = Message("Hello", recipients=["test@example.com"])
          mail.send(msg)
          return 'Mail sent!'
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

      解析:Flask-Mail扩展简化了发送邮件的过程,该示例展示了如何发送一封简单的电子邮件。

    9. OAuth认证
      Flask-Dance是一个实现OAuth认证的扩展,支持多个提供商。

      pip install Flask-Dance
      
      • 1
      from flask_dance.contrib.github import make_github_blueprint, github
      
      github_bp = make_github_blueprint(client_id='your_client_id', client_secret='your_secret')
      app.register_blueprint(github_bp, url_prefix="/github_login")
      
      • 1
      • 2
      • 3
      • 4

      解析:该示例展示了如何使用Flask-Dance与GitHub进行OAuth认证。

    10. 在线支付
      通过集成Stripe, PayPal等服务,Flask可以实现在线支付功能。

      pip install stripe
      
      • 1
      import stripe
      
      stripe.api_key = "your_secret_key"
      
      @app.route('/pay')
      def pay():
          charge = stripe.Charge.create(
              amount=2000,
              currency='usd',
              description='A Flask Charge',
              source='tok_visa',
          )
          return 'Paid!'
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13

      解析:该示例展示了如何使用Stripe库在Flask应用中实现在线支付。

    11. 应用性能监控
      使用Flask-Talisman或NewRelic等服务,可以监控Flask应用的性能和安全性。

      pip install Flask-Talisman
      
      • 1
      from flask_talisman import Talisman
      
      Talisman(app)
      
      • 1
      • 2
      • 3

      解析:Flask-Talisman增加了一些HTTP安全头以增强应用的安全性,还可以集成其他性能和安全性监控服务。

    12. 图像处理
      通过Pillow库,Flask可以实现图像处理功能。

      pip install Pillow
      
      • 1
      from PIL import Image
      
      @app.route('/image')
      def image():
          img = Image.open("example.jpg")
          img = img.rotate(45)
          img.save("rotated.jpg")
          return 'Image processed!'
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

      解析:该示例展示了如何使用Pillow库在Flask应用中对图像进行处理。

    13. Web表单处理
      使用Flask-WTF扩展可以方便地处理Web表单。

      pip install Flask-WTF
      
      • 1
      from flask_wtf import FlaskForm
      from wtforms import StringField, SubmitField
      
      class MyForm(FlaskForm):
          name = StringField('Name')
          submit = SubmitField('Submit')
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

      解析:这个示例展示了如何使用Flask-WTF创建一个简单的表单。

    14. 用户认证和授权
      Flask-Security扩展提供了用户认证和授权的一整套解决方案。

      pip install Flask-Security
      
      • 1
      from flask_security import Security, SQLAlchemyUserDatastore, UserMixin, RoleMixin
      
      class Role(db.Model, RoleMixin):
          id = db.Column(db.Integer(), primary_key=True)
          name = db.Column(db.String(80), unique=True)
      
      class User(db.Model, UserMixin):
          id = db.Column(db.Integer, primary_key=True)
          email = db.Column(db.String(255), unique=True)
          password = db.Column(db.String(255))
      
      user_datastore = SQLAlchemyUserDatastore(db, User, Role)
      security = Security(app, user_datastore)
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13

      解析:这个示例展示了如何使用Flask-Security进行用户的认证和授权。

    15. 异步编程
      Flask可以与异步库如gevent一同使用,实现异步IO。

      pip install gevent
      
      • 1
      from gevent.pywsgi import WSGIServer
      from flask import Flask
      
      app = Flask(__name__)
      
      http_server = WSGIServer(('', 5000), app)
      http_server.serve_forever()
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

      解析:该示例演示了如何使用gevent库运行Flask应用,以实现异步处理。

    16. 内容管理
      使用Flask-Admin扩展,可以快速为应用添加后台管理界面。

      pip install Flask-Admin
      
      • 1
      from flask_admin import Admin
      
      admin = Admin(app, name='My App', template_mode='bootstrap3')
      
      • 1
      • 2
      • 3

      解析:这个示例展示了如何使用Flask-Admin快速创建一个管理后台。

    17. GraphQL支持
      通过集成Graphene库,Flask可以支持GraphQL API。

      pip install graphene
      
      • 1
      from flask_graphql import GraphQLView
      from graphene import Schema
      
      app.add_url_rule('/graphql', view_func=GraphQLView.as_view('graphql', schema=Schema(), graphiql=True))
      
      • 1
      • 2
      • 3
      • 4

      解析:该示例演示了如何在Flask应用中集成GraphQL API。

    这些例子只是冰山一角,Flask的生态非常丰富,几乎可以找到满足任何需求的库和插件。同时,Flask的文档和社区也非常活跃,是学习和解决问题的宝贵资源。当然,为了更深入地学习,建议查阅Flask的官方文档

  • 相关阅读:
    云小课|3种常用Git工作流推荐
    哈夫曼树原理及Java编码实现
    HarmonyOS-使用router事件跳转到指定UIAbility
    Dubbo的整体框架和主要模块
    快速上手:剧本杀dm预约平台小程序的制作流程
    《天天数学》连载54:二月二十三日
    计算机毕业设计ssm数字图书馆on33n系统+程序+源码+lw+远程部署
    C语言01、数据类型、变量常量、字符串、转义字符、注释
    数据挖掘 决策树
    并发编程系列 - ReadWriteLock
  • 原文地址:https://blog.csdn.net/m0_57021623/article/details/133190414