宁乡网站开发公司推荐,360网站卫士代备案流程,div布局在线音乐网站设计,中国网库网站介绍一、背景简介
Flask应用程序可以像单个文件一样简单。就像上一篇简单实现一个接口一样#xff0c;所有的东西都在一个python文件内#xff1b;
然而#xff0c;当项目越来越大的时候#xff0c;把所有代码放在单个文件中就有点不堪重负了。 Python 项目使用 包 来管理代码…一、背景简介
Flask应用程序可以像单个文件一样简单。就像上一篇简单实现一个接口一样所有的东西都在一个python文件内
然而当项目越来越大的时候把所有代码放在单个文件中就有点不堪重负了。 Python 项目使用 包 来管理代码把代码分为不同的模块然后在需要的地方导入模块。
二、项目目录
项目目录一般如下分配 项目路径D:\projects\zfx_py\flask24
project/ 一个包含应用程序代码和文件的python包还有静态文件和templates。tests/ 包含测试模块的文件夹。app.py(以下改名为main.py) 项目入口告诉python如何安装项目的安装文件。版本控制配置例如 git . 无论项目大小应该习惯于对所有项目使用某种类型的版本控制。可能需要添加的任何其他项目文件。
最后我的项目布局如下
三、应用设置—分析入口文件main.py
打开该文件
from project import create_appapp create_app()
里面只导入了project模块下的creat_app方法分享一下我的这个分享
import os
# import logging
# from logging.handlers import TimedRotatingFileHandler
from flask import Flask
# from flask_cors import CORS
# from flask_caching import Cache
# from flask_migrate import Migrate
# from flask_sqlalchemy import SQLAlchemy
from project.config import config # 导入存储配置的字典# cache Cache()# 创建数据库连接
# db SQLAlchemy()# migrate Migrate()
# cors CORS()
# time_handler TimedRotatingFileHandler(storage/logs/project.log, whenmidnight, backupCount30, encodingutf-8)
# time_handler.suffix %Y%m%d
# time_handler.setFormatter(logging.Formatter([%(asctime)s] %(levelname)s in %(module)s: %(message)s))
# time_handler.setLevel(logging.INFO)def create_app(config_nameNone):if config_name is None:config_name os.getenv(FLASK_ENV, development) # 从环境变量中获取FLASK_ENV并设置默认值app Flask(project)# setup config,导入配置根据配置环境实例化对象# app.config.from_object(config[config_name])# db.init_app(app)# migrate.init_app(app, db)# app.logger.addHandler(time_handler)# cache.init_app(app)# cors.init_app(app, origins*)from project.auth import authfrom project.blog import blog_base_blueprintapp.register_blueprint(auth)app.register_blueprint(blog_base_blueprint)return app
根据代码可以看到这个create_app 是一个应用工厂函数里面创建Flask 实例并返回所以这跟咱们再入口文件main.py内直接写是一样。
调用的方法解释
1、Flask(name, instance_relative_configTrue)创建flask实例
name 是当前python模块的名称。应用程序需要知道它在哪里设置一些路径使用 name 是一个方便的方法。我这里应用程序代码都在project里所以我直接使用了app Flask(project)的写法instance_relative_configTrue 告诉应用程序配置文件是相对于 instance folder 的相对路径.实例文件夹在 flaskr 包的外面用于存放本地数据例如配置密钥和数据库不应当提交到版本控制系统。
2、os.getenv获取系统环境变量的值
它可以获取指定环境变量的值并以字符串形式返回。 对于不适合写在程序里的配置比如密码等需要把配置写入系统环境变量然后使用os模块的getenv()方法获取第二个参数作为默认值
3、app.config.from_object()导入配置文件
程序逐渐变大时配置也逐渐增多写在主脚本里太占地方不够优雅。我们可以创建一个单独的配置文件。然后在主脚本里导入就可以正常使用了 关于配置文件的介绍具体请参考下一篇Flask 配置文件使用相关介绍。
点击查看Flask官方文档介绍
4、app.register_blueprint():注册蓝图
Blueprint 是一种组织一组相关视图和其他代码的方法。它们不是直接在应用程序中注册视图和其他代码而是在蓝图中注册。然后当蓝图在工厂函数中可用时将它注册到应用程序中。 每个蓝图的代码将进入一个单独的模块。我这里有两个蓝图一个登录注册使用的auth一个是对文章管理的blog蓝图里面有获取列表增删改查文章内容我个人认为蓝图相对于php里的控制器模型服务也就是跟这个模块相关的所有逻辑代码里面也是使用return返回前端需要的接口内容