• 【Flask框架②】——第一个Flask项目


    在这里插入图片描述

    🐚 作者: 阿伟
    💂 个人主页: Flyme awei

    🐋 希望大家多多支持😘一起进步呀!

    💬 文章对你有帮助👉关注✨点赞👍收藏📂

    Flask框架

    在这里插入图片描述

    第一个Flask项目

    本文适合有一定前端、Python、网路基础的同学阅读。

    1、安装环境

    创建虚拟环境

    mkvirtualenv flask

    安装Flask

    pip install flask

    查看虚拟环境

    workon

    进入虚拟环境

    workon flask_env

    列出当前虚拟环境安装的库

    pip list

    在这里插入图片描述

    2、创建项目

    在这里插入图片描述
    在这里插入图片描述
    app.py

    rom flask import Flask
    
    app = Flask(__name__)  # 初始化 Flask项目的服务
    
    
    @app.route('/')
    def hello_world():  # put application's code here
        return 'Hello World!'
    
    
    if __name__ == '__main__':
      
        app.run()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    3、启动程序

    方式一:pycharm run
    在这里插入图片描述
    方式二 :terminal python app.py
    在这里插入图片描述

    方式三 进入目录 python app.py
    在这里插入图片描述
    方式四 设置环境变量 set FLASK_APP = app.py
    flask run
    在这里插入图片描述
    Ctrl C 关闭程序

    4、访问项目

    在这里插入图片描述

    5、参数说明

    文件:app.py

    rom flask import Flask
    
    app = Flask(__name__)  # 初始化 Flask项目的服务
    
    
    @app.route('/')
    def hello_world():  # put application's code here
        return 'Hello World!'
    
    
    if __name__ == '__main__':
      
        app.run()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    接下来就来详细查看一下 Flask 应用程序在创建的时候一些需要我们关注的参数

    def __init__(
            self,
            import_name: str,
            static_url_path: t.Optional[str] = None,
            static_folder: t.Optional[t.Union[str, os.PathLike]] = "static",
            static_host: t.Optional[str] = None,
            host_matching: bool = False,
            subdomain_matching: bool = False,
            template_folder: t.Optional[str] = "templates",
            instance_path: t.Optional[str] = None,
            instance_relative_config: bool = False,
            root_path: t.Optional[str] = None,
        ):
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    import_name:str,
    当前Flask程序所在的包(模块)名字,传 __name__ 就可以 其可以决定 Flask 在访问静态文件时查找的路径

    static_url_path: t.Optional[str] = None,
    静态文件访问路径,可以不传,默认为:/ + static_folder

    static_folder: t.Optional[t.Union[str, os.PathLike]] = "static",
    静态文件存储的文件夹,可以不传,默认为 static

    template_folder: t.Optional[str] = "templates",
    模板文件存储的文件夹,可以不传,默认为 templates

    默认参数情况下

    app = Flask(__name__)
    |---static
    		|--- 1.png
    |---templates
    		|--- index.html
    |---helloword.py
    访问127.0.0.1:5000:static/1.png
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    修改参数的情况下

    from flask import Flask
    
    app = Flask(__name__, static_url_path='/Flyme awei', static_folder='static')  # 初始化 Flask项目的服务
    
    
    @app.route('/')
    def hello_world():  # put application's code here
        return 'Hello World!'
    
    
    if __name__ == '__main__':
        # IP:0.0.0.0 代表当前计算机所有的IP地址,
        # port:端口默认是 5000
        # flask的debug模式:把错误信息显示到页面中
        app.run(host='0.0.0.0', port=5000, debug=True)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    debug源文件
    在这里插入图片描述

    app = Flask(__name__, static_url_path='/Flyme awei',static_folder='static')
    ----
    |---folder_param # 此处目录名变化 | 
    |--- 1.png 
    |---helloworld.py 
    
    访问127.0.0.1:5000/static_url_path/1.png才可以访问到图片
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    app.run参数
    可以指定运行的主机IP地址,端口,是否开启调试模式

    app.run(host="0.0.0.0", port=5000, debug = True) 
    
    IP:0.0.0.0 代表当前计算机所有的IP地址
    
    • 1
    • 2
    • 3

    关于DEBUG调试模式
    在这里插入图片描述

    1.程序代码修改后可以自动重启服务器
    2.在服务器出现相关错误的时候可以直接将错误信息返回到前端进行展示
    在这里插入图片描述

    6、应用程序配置参数

    应用程序配置参数设置的是一个Web应用工程的相关信息,比如:

    • 数据库的连接信息
    • 日志的配置信息
    • 自定义的配置信息

    注意:这样可以集中管理项目的所有配置信息
    Flask将配置信息保存到了app.config属性中,该属性可以按照字典类型进行操作。

    1.从配置对象中加载

    app.config.from_object(DefaultConfig)

    # -*- coding: utf-8 -*-
    # @File  : 02应用程序参数.py
    # @author: Flyme awei 
    # @email : 1071505897@qq.com
    # @Time  : 2022/7/26 0:25
    
    
    from flask import Flask
    
    
    class DefaultConfig(object):
        """默认Web项目配置"""
        USER = 'Flyme awei'
        PWD = 'root'
    
    
    app = Flask(__name__)
    app.config.from_object(DefaultConfig)
    
    
    @app.route('/')
    def index():
        print(app.config['USER'])
        print(app.config["PWD"])
        return "hello word!"
    
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=8080)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    在这里插入图片描述
    这样的好处是可以在项目开发中来继承和重写:

    class MyDevelopmentConfig(DefaultConfig): 
    	DEBUG=True
    
    • 1
    • 2

    2.从配置文件中加载

    新建一个配置文件setting.py ,这个文件中的内容是: 参数名=参数值 ,比如:PWD = 'root'

    app.config.from_pyfile('setting.py')

    # -*- coding: utf-8 -*-
    # @File  : setting.py.py
    # @author: Flyme awei 
    # @email : 1071505897@qq.com
    # @Time  : 2022/7/26 0:38
    
    
    # Web 项目的整个配置文件
    USER = 'Flyme awei'
    PWD = 'root'
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    # -*- coding: utf-8 -*-
    # @File  : 02从配置对象中加载.py
    # @author: Flyme awei 
    # @email : 1071505897@qq.com
    # @Time  : 2022/7/26 0:25
    
    
    from flask import Flask
    
    
    app = Flask(__name__)
    app.config.from_pyfile('setting.py')
    
    
    @app.route('/')
    def index():
        print(app.config['USER'])
        print(app.config["PWD"])
        return "hello word!"
    
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=8080)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    在这里插入图片描述

    3.从环境变量中加载

    先配置环境变量
    在这里插入图片描述

    在这里插入图片描述

    Flask使用环境变量加载配置的本质是通过环境变量值找到配置文件,再读取配置文件的信息,其使用方式为

    app.config.from_envvar('环境变量名')

    环境变量的值为配置文件的绝对路径
    先在终端中执行如下命令

    export PROJECT_SETTING='~/setting.py

    # -*- coding: utf-8 -*-
    # @File  : 04从环境变量中加载.py
    # @author: Flyme awei 
    # @email : 1071505897@qq.com
    # @Time  : 2022/7/26 0:50
    
    
    from flask import Flask
    
    
    app = Flask(__name__)
    
    
    app.config.from_envvar('SETTING_PATH', silent=True)
    
    
    @app.route('/')
    def hello_word():
        print(app.config['USER'])
        print(app.config['PWD'])
        return 'hello word'
    
    
    if __name__ == '__main__':
        app.run('0.0.0.0', 8888, debug=True)
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    silent参数:
    False 表示不安静的处理,没有值时报错通知,默认为False
    True 表示安静的处理,即时没有值也让Flask正常的运行下去

    4.从Pycharm中的运行时设置环境变量的方式加载

    使用非常少
    在这里插入图片描述在这里插入图片描述

    5.企业项目开发常用的方式

    使用工厂模式创建Flask app,并结合使用配置对象与环境变量加载配置

    • 使用配置对象加载默认配置
    • 使用环境变量加载不想出现在代码中的敏感配置信息
    def create_flask_app(config): 
    	""" 创建Flask应用 :param config: 配置对象 :return: Flask应用 """ 
    	app = Flask(__name__) 
    	app.config.from_object(config)
    
    	# 从环境变量指向的配置文件中读取的配置信息会覆盖掉从配置对象中加载的同名参数
    	app.config.from_envvar("PROJECT_SETTING", silent=True) 
    	return app 
    
    
    class DefaultConfig(object): 
    	"""默认配置""" 
    	USER = 'ROOT' 
    
    
    class DevelopmentConfig(DefaultConfig): 
    	DEBUG=True 
    
    
    # app = create_flask_app(DefaultConfig)
    app = create_flask_app(DevelopmentConfig) 
    
    
    @app.route("/") 
    def index(): 
    	print(app.config['USER']) 
    	return "hello world"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    好啦,文章到这里就结束啦!
    在这里插入图片描述

  • 相关阅读:
    Mujoco仿真【将urdf文件转化为xml文件】
    Ubuntu 22.04 x86_64 源码编译 pytorch-v2.0.1 笔记【2】编译成功
    大数据课程L5——网站流量项目的实时业务系统搭建
    web前端期末大作业网课设计与实现 _简单DIV布局旅游网页——简洁的旅游酒店公寓(15页)html css javascript
    码蹄集 - MT2095 · 曲径折跃
    Java随笔-Semaphore
    拥抱云原生,下一代边缘计算云基础设施
    免费小程序商城搭建之b2b2c o2o 多商家入驻商城 直播带货商城 电子商务b2b2c o2o 多商家入驻商城 直播带货商城 电子商务
    0基础学习VR全景平台篇 第104篇:720全景后期软件安装
    【C/PTA】数组进阶练习(三)
  • 原文地址:https://blog.csdn.net/m0_68744965/article/details/125984382