Flask初步认识
1.Flask基本认识
Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展包(数据库Flask-SQLAlchemy),都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM、窗体验证工具,文件上传、身份验证等。Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用 NoSQL。其 WSGI 工具箱采用 Werkzeug(路由模块),模板引擎则使用 Jinja2。这两个也是 Flask 框架的核心。
核心:werkzeug和Jinja2
- werkzeug是python的模块,封装了请求、响应、编码、数据认证等内容;
- Jinja2是模板引擎;
- Flask诞生2010年、简洁、轻量、扩展性强
2.框架的特点、异同、应用场景?
- Django:集成度高、web项目需要的基本功能,都封装在框架中,ORM、CSRF、后台管理等;
- Flask:简洁、轻量、扩展性强;
3.Flask 环境搭建
3.1使用虚拟环境创建虚拟环境,mkvirtualenv自行百度(这里略过)
3.2使用pycharm创建虚拟环境(推荐)
4.创建Flask简单应用
# 导入Flask类
from flask import Flask
"""
Flask类接收一个参数__name__
import_name
Flask程序所在的包(模块),传 __name__ 就可以
其可以决定 Flask 在访问静态文件时查找的路径
static_url_path
静态文件访问路径,可以不传,默认为:/ + static_folder
static_folder
静态文件存储的文件夹,可以不传,默认为 static
template_folder
模板文件存储的文件夹,可以不传,默认为 templates
"""
app = Flask(__name__)
# 装饰器的作用是将路由映射到视图函数index
@app.route('/')
def index():
return 'Hello World'
#app.add_url_rule("/",view_func=index) # 此方法和@app.route('/')类似,就是映射url与相应视图函数
# Flask应用程序实例的run方法启动WEB服务器
if __name__ == '__main__':
app.run()
5.应用程序配置参数设置(集中管理项目所有配置信息)
5.1配置文件
Django将所有配置信息都放到了settings.py文件中。
Flask将配置信息保存到了app.config属性中,该属性可以按照字典类型进行操作。
5.2flask获取配置信息
- app.config.get(name)
- app.config[name]
5.2Flask配置设置(主要有三种)
加载配置对象:一般存储业务相关的配置信息,比如数据库配置、连接信息、各种初始化的配置信息等;
- 优点:封装性好,可复用性强
- 缺点:不安全;
加载配置文件:
- 复用性相对不好,不是很安全;
加载环境变量:一般存储敏感信息,不适合对外公开的信息,比如密钥、签名等;
- 使用相对复杂,更安全;
总结:项目中使用第一种和第三种;
不同的配置方式中,如果key是相同的,加载到的配置信息是哪个?最近调用的那个,记着每次调用都会把新调用中的配置信息覆盖以前的
5.2.1从配置对象中加载app.config.from_object(配置对象)
class DefaultConfig(object):
"""默认配置"""
DEBUG_BOOLE=True app = Flask(__name__) app.config.from_object(DefaultConfig) @app.route("/")
def index():
print(app.config['DEBUG_BOOLE'])
return "hello world"
5.2.2从配置文件中加载app.config.from_pyfile(配置文件)
#1.新建一个配置文件setting.py(或者setting.ini)里面写入DEBUG_BOOLE=True
#2。在flask程序文件中
app = Flask(__name__) app.config.from_pyfile('/xxxx/xx/xx/setting.py') # 里面写你上面配置文件的路径,如果在当前文件夹里创建的,就直接写setting.py,如果不是就写setting文件的路径 @app.route("/")
def index():
print(app.config['DEBUG_BOOLE'])
return "hello world"
5.2.3从环境变量中加载app.config.from_envvar(variable_name: str, silent: bool = False) Flask使用环境变量加载配置的本质是通过环境变量值找到配置文件,再读取配置文件的信息
variable_name表示环境变量(一般是指在操作系统中用来指定操作系统运行环境的一些参数。通俗的讲:环境变量就是我们设置在操作系统中,由操作系统代为保存的变量值)
silent表示系统环境变量中没有设置相应值时是否抛出异常(False 表示不安静的处理,没有值时报错通知,默认为False,True 表示安静的处理,即时没有值也让Flask正常的运行下去。)5.2.3-1.Linux系统中设置加入环境变量
在Linux系统中设置和读取环境变量的方式如下:
#设置:export 变量名=变量值 export ITNAME=python
#读取:echo $变量名 echo $ITNAME
Flask使用环境变量加载配置的本质是通过环境变量值找到配置文件,再读取配置文件的信息,其使用方式为
app.config.from_envvar('环境变量名')环境变量的值为配置文件的绝对路径
先在终端中执行如下命令:export PROJECT_SETTING='~/setting.py'
再运行如下代码 app = Flask(__name__) app.config.from_envvar('PROJECT_SETTING', silent=True) @app.route("/")
def index():
print(app.config['ITNAME'])
return "hello world"
5.2.3-2Pycharm运行时设置环境变量的方式
app = Flask(__name__) app.config.from_envvar('SET') @app.route("/")
def index():
print(app.config['DEBUGBOOLE']) # DEBUGBOOLE是SET环境变量对应的配置文件里面的信息
return "hello world"
5.2.3-3项目中常用的方式
使用工厂模式创建Flask app,并结合使用配置对象与环境变量加载配置
使用配置对象加载默认配置
使用环境变量加载不想出现在代码中的敏感配置信息# 工厂模式:
# 1.定义工厂函数,封装创建程序实例的代码
# 2.定义函数的参数,可以根据参数的不同,生成不同的app # 从环境变量中加载配置信息,一般是不适合对外公开的信息;
def create_flask_app(config,enable_config_file=False):
"""
创建Flask应用
config:配置信息对象
enable_config_file:是否允许运行环境中的配置文件覆盖已加载的配置信息
:return: Flask应用
"""
app = Flask(__name__)
app.config.from_object(config)
if enable_config_file:
from common.utils import constants
app.config.from_envvar("SET",silent=True)
return app # 从配置对象中加载配置信息,一般是和业务相关的信息,比如数据库的连接信息等
def create_app(config,enable_config_file=False):
"""
创建应用
config:配置对象信息
enable_config_file:是否允许运行环境中的配置文件覆盖已加载的配置信息
:return: app 应用
"""
app = create_flask_app(config,enable_config_file)
return app class DefaultConfig(object):
"""配置对象"""
DEBUG_BOOLE=True
# 调用工厂函数,传入配置参数,获取程序实例对象
#app = create_app(DefaultConfig)
app = create_app(DefaultConfig,enable_config_file=True)
@app.route("/")
def index():
print(app.config['DEBUG_BOOLE'])
return "hello world"
6.服务器启动方式
在1.0版本之后,Flask调整了开发服务器的启动方式,由代码编写app.run()语句调整为命令flask run启动。即在开发服务器中不用在写
if __name__ == '__main__':
app.run(debug=True)
终端启动
export FLASK_APP= xxxx # xxxx是你要创建要运行的文件名
# 生产模式与开发模式的控制,通过FLASK_ENV环境变量指明
# export FLASK_ENV=production 运行在生产模式,未指明则默认为此方式
# export FLASK_ENV=development运行在开发模式
flask run
#flask run -h 服务器地址 -p 端口号
Pycharm启动
①开发阶段可以在运行的启动文件,最下面加上下面代码,直接右击运行这个文件就行if __name__=='__main__':
app.run(debug=True)
②通过设置要运行文件的 Environment,设置如下图,设置好之后在直接右击运行这个文件就行
最新文章
- Spring学习系列(一) Spring简介
- asp.net mvc 自定义pager封装与优化
- CentOS7网络配置
- 将前台json对象传入java后台
- C基础之递归(思想很重要,学会找规律)
- Chapter9:顺序容器
- Java设计模式系列之适配器模式
- 断开SVN连接操作方法
- NOI题库2454 雷涛的小猫
- 一道关于call和this的JS面试题
- 解决初次使用webpack+antd-mobile时css不生效的问题
- spring boot一个简单用户管理DEMO
- Git问题总结
- Pythonic是什么?
- 集合之LinkedHashMap(含JDK1.8源码分析)
- Node安装及自定义config
- January 04th, 2018 Week 01st Thursday
- VS2017不能打开stdio.h等文件
- [洛谷 P3788] 幽幽子吃西瓜
- SAS FORMAT 逻辑库存储 【输出格式 没有找到或无法加载】解决方法
热门文章
- 云原生强大且灵活的持续集成CI开源框架Tekton实战-上
- CF600E Lomsat gelral (线段树合并)
- JSP中request对象的简单实用,实现简单的注册以及个人信息的展示
- javascript编程单线程之同步模式
- Tauri-Vue3桌面端聊天室|tauri+vite3仿微信|tauri聊天程序EXE
- Jquery中Trigger()方法
- Linux三剑客sed
- 如何免安装使用 Python?推荐 17 个在线的 Python 解释器!
- packet Capture 手机抓包工具
- C#与Halcon联合编程之用PictureBox控件替代HWindowControl控件