python web flask专题-Flask入门指南:从安装到核心功能详解

06-01 1579阅读

Flask入门指南:从安装到核心功能详解

Flask作为Python最流行的轻量级Web框架之一,以其简洁灵活的特性广受开发者喜爱。本文将带你从零开始学习Flask,涵盖安装配置、项目结构、应用实例、路由系统以及请求响应处理等核心知识点。

python web flask专题-Flask入门指南:从安装到核心功能详解

1. Flask安装与项目结构

1.1 安装Flask

在开始之前,请确保已安装Python(建议3.6+版本)。通过pip安装Flask:

pip install flask

验证安装是否成功:

python -c "import flask; print(flask.__version__)"

1.2 最小Flask应用

创建一个最简单的Flask应用app.py:

from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
    return 'Hello, World!'
if __name__ == '__main__':
    app.run(debug=True)

运行应用:

python app.py

访问http://127.0.0.1:5000即可看到"Hello, World!"。

代码解释:

  • Flask(__name__)创建应用实例,__name__确定应用根目录
  • @app.route('/')装饰器定义路由
  • app.run(debug=True)启动开发服务器,debug=True启用调试模式

    1.3 基本项目结构

    随着项目增长,推荐的组织结构:

    /flask_project
        /app
            /static       # 静态文件(CSS, JS, 图片)
            /templates    # 模板文件(HTML)
            __init__.py   # 应用工厂函数
            routes.py     # 路由定义
            models.py     # 数据模型
        config.py         # 配置文件
        requirements.txt  # 依赖列表
    

    2. Flask应用实例配置详解

    2.1 应用工厂模式

    使用工厂函数创建应用更灵活:

    # app/__init__.py
    from flask import Flask
    from . import routes
    def create_app(config_filename=None):
        app = Flask(__name__)
        
        # 加载配置
        if config_filename:
            app.config.from_pyfile(config_filename)
        else:
            app.config.from_mapping(
                SECRET_KEY='dev',
                DATABASE='sqlite:///app.db',
            )
        
        # 注册蓝图或路由
        app.register_blueprint(routes.bp)
        
        return app
    

    2.2 常用配置项

    Flask配置可以通过多种方式设置:

    # 直接设置
    app.config['SECRET_KEY'] = 'your-secret-key'
    # 从对象加载
    class Config:
        SECRET_KEY = 'your-secret-key'
        DEBUG = True
    app.config.from_object(Config)
    # 从文件加载
    app.config.from_pyfile('config.py')
    # 常用配置项:
    # DEBUG - 是否启用调试模式
    # TESTING - 是否启用测试模式
    # SECRET_KEY - 加密会话的密钥
    # SESSION_COOKIE_NAME - 会话cookie名称
    # PERMANENT_SESSION_LIFETIME - 持久会话有效期
    

    3. 路由定义详解

    3.1 基本路由

    @app.route('/')
    def index():
        return '首页'
    @app.route('/about')
    def about():
        return '关于我们'
    

    3.2 动态路由

    @app.route('/user/')
    def show_user(username):
        return f'用户: {username}'
    @app.route('/post/')
    def show_post(post_id):
        return f'文章ID: {post_id}'
    

    路由转换器类型:

    • string: (默认)接受任何不包含斜线的文本
    • int: 接受正整数
    • float: 接受正浮点数
    • path: 类似string但包含斜线
    • uuid: 接受UUID字符串

      3.3 HTTP方法

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

      3.4 URL生成

      使用url_for()生成URL:

      from flask import url_for
      @app.route('/')
      def index():
          print(url_for('login'))  # 输出: /login
          print(url_for('show_user', username='john'))  # 输出: /user/john
          return '首页'
      

      4. 请求与响应处理

      4.1 请求对象(Request)

      Flask自动将请求数据封装在request对象中:

      from flask import request
      @app.route('/search')
      def search():
          query = request.args.get('q', '')  # 获取查询参数
          return f'搜索: {query}'
      @app.route('/submit', methods=['POST'])
      def submit():
          username = request.form['username']  # 获取表单数据
          file = request.files['avatar']      # 获取上传文件
          return f'用户名: {username}'
      

      常用request属性:

      • args: GET请求参数 (查询字符串)
      • form: POST表单数据
      • files: 上传的文件
      • headers: 请求头
      • method: 请求方法
      • json: 解析后的JSON数据

        4.2 响应对象(Response)

        视图函数可以返回多种类型的响应:

        from flask import make_response, jsonify, redirect
        # 返回字符串
        @app.route('/text')
        def text_response():
            return '纯文本响应'
        # 返回JSON
        @app.route('/json')
        def json_response():
            return jsonify({'status': 'success', 'data': [1, 2, 3]})
        # 自定义响应
        @app.route('/custom')
        def custom_response():
            response = make_response('自定义响应')
            response.headers['X-Custom-Header'] = 'Value'
            response.status_code = 201
            return response
        # 重定向
        @app.route('/old')
        def old_route():
            return redirect('/new')
        

        4.3 处理文件上传

        from werkzeug.utils import secure_filename
        @app.route('/upload', methods=['POST'])
        def upload_file():
            if 'file' not in request.files:
                return '没有文件部分'
            
            file = request.files['file']
            if file.filename == '':
                return '没有选择文件'
            
            if file and allowed_file(file.filename):
                filename = secure_filename(file.filename)
                file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
                return '文件上传成功'
        

        4.4 处理Cookie

        @app.route('/set-cookie')
        def set_cookie():
            resp = make_response('设置Cookie')
            resp.set_cookie('username', 'john', max_age=3600)
            return resp
        @app.route('/get-cookie')
        def get_cookie():
            username = request.cookies.get('username')
            return f'用户名: {username}'
        

        5. 总结

        通过本文的学习,你应该已经掌握了Flask的核心基础知识:

        1. 安装与项目结构:

          • 使用pip安装Flask
          • 合理组织项目目录结构
          • 理解最小Flask应用的构成
          • 应用实例配置:

            • 使用工厂模式创建应用
            • 掌握多种配置方式
            • 了解常用配置项
            • 路由系统:

              • 定义静态和动态路由
              • 处理不同的HTTP方法
              • 使用url_for()生成URL
              • 请求与响应:

                • 访问请求数据(request对象)
                • 构建各种类型的响应
                • 处理文件上传和Cookie

        Flask的简洁性使其成为学习Web开发的理想框架,但其扩展性又能满足复杂应用的需求。建议在掌握这些基础知识后,继续学习以下内容:

        • 模板渲染(Jinja2)
        • 数据库集成(Flask-SQLAlchemy)
        • 用户认证(Flask-Login)
        • 使用蓝图(Blueprint)组织大型应用
        • 部署Flask应用到生产环境

          记住,最好的学习方式是实践 - 尝试用Flask构建一个小型项目,如博客系统或待办事项应用,将帮助你巩固这些概念。

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码