01初识flask

这篇博客介绍了如何学习框架,重点聚焦于Flask。内容涵盖了Flask的简介、与Django的区别、官方文档,以及工程搭建的详细步骤,包括环境配置、简单项目编写、常用参数说明和启动参数等。此外,还讨论了Pycharm中设置Flask项目的快捷方法和路由的基本概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何学习框架

结合需求,问题去探究并理解问题的内在本质,及解决问题的思想和思路。

Flask

简介

最新版本1.1.0
诞生于2012年,Armin ronacher创始人
核心:(WSGI工具箱)Werkzueg、(模板引擎)Jinja2

与Django的区别

flask不直接具备:
django-admin、manage.py管理项目工程、orm模型、admin操作站点、认证系统、缓存机制、文件储存
需要拓展包去实现:
Flask-SQLalchemy 		# 操作数据库
Flask-script			# 插入脚本
Flask-migrate			# 管理迁移数据库
Flask-Session			# Session储存方式指定
Flask-WTF				# 表单
Flask-Mail				# 邮件
Flask-Bable				# 国际化和本地化支持 翻译
Flask-Login				# 认证用户状态
Flask-OpenID			# 认证
Flask-RESTful			# 开发REST API的工具
Flask-Bootstrap			# 集成前端Twitter Bootstrap框架
Flask-Moment			# 本地化日期和时间
Flask-Admin				# 简单和可扩展的管理接口的框架

官方文档

中文:http://docs.jinkan.org/docs/flask/
英文:http://flask.pocoo.org/docs/1.0/

两者的特点

Django:快速实现业务功能, 工具组件丰富, 但有框架约束
flask:只提供Web核心功能, 便于调整业务结构技术选型, 自由度高

工程搭建

环境配置

# 创建虚拟环境
mkvirtualenv flask-env -p python3
# 安装flask包
pip install flask

简单项目编写

from flask import Flask

app = Flask(__name__)					# __name__ --> def __init__

'''工程配置加载'''
# app.config.from_object()
# app.config.from_pyfile()
# app.config.from_envvar('', slient= )

# 视图
@app.route('/')
def index():
	return 'hello world'
	
if __name__ == '__main__':
	app.run()

# 启动    
python 文件名.py

常用参数说明

Flask(__name__)				# BASE_DIR-->flask项目的所在, 查询静态文件的起始位置

def __init__(
        self,
        import_name,
        static_url_path=None,				# 静态访问路径, 默认 / + static_folder
        static_folder="static",				# 静态文件夹
        static_host=None,
        host_matching=False,
        subdomain_matching=False,
        template_folder="templates",		# 模板文件夹
        instance_path=None,						
        instance_relative_config=False,
        root_path=None,
    ):

工程配置加载

配置信息保存在 app.config 属性中, 可以当做字典类型操作。
app.config.get( )
app.config[ ]

# 方式一(从对象中加载):
class DefaultConfig(object):
	SECRET_KEY = 'ST UDJYU E56Y5E'
	
app.config.from_object(DefaultConfig)

优点:继承复用
缺点:暴露敏感代码

# 方式二(从py文件导入):
app.config.from_pyfile('settings.py')

优点:独立存放, 保护敏感数据
缺点:无继承, 路径写死不灵活

# 方式三(配置环境变量):
cmd --> export SETTINGS='~/settings.py'	# 设置一组 KEY:VALUE 保存在系统内
app = Flask(__name__)
app.config.from_envvar('SETTINGS', silent='错误忽略')	# 默认False, True就不报错

优点:保护数据, 路径灵活
缺点:不方便, 需要设置path

项目常用方式

# 将flask生成对象的方法, 改造为一个工厂函数
class DefaultConfig(object):					# 配置类型
	SECRET_KEY = 'ST UDJYU E56Y5E'
    DEBUG = True								# 开启调试模式

def create_flask_app(config):					# 工厂函数
	app = Flask(__name__)
	app.config.from_object(config)
	app.config.from_envvar('PROJECT_SETTING')
	return app									# 要将app传出
	
app = create_flask_app(DefaultConfig)			# 调用, 生成flask实例

启动参数

if __name__ == '__main__':
	app.run(host=" ", port= , debug= )	# 可以自定义 IP 端口 调试模式

'''1.0版后, 启动main不用书写, 可以添加环境变量, 通过 flask run 在终端启动'''
export FLASK_APP = 项目加载文件名		# FLASK_APP不能变更
flask run
flask run -h IP -p 端口			# 可以自定义地址和端口

# 环境控制
export FLASK_ENV = production		# 生产模式, 默认值
export FLASK_ENV = development		# 开发模式

Pycharm中快速设置启动

# 添加局部环境变量
# 运行按钮左侧-->对应文件——>edit——>Environment variables——>添加键值对
PROJECT_SETTING  ...py
FLASK_APP        ...py

# 添加执行命令, 二选一

(低版本)
Script path		[空白]
Parameters --> -m flask run

(高版本)
Module name(下拉菜单) --> flask
Parameters --> run

其他扩展知识

# format = % 占位输出

"{}{}".format(1,2)
>>12

一般项目代码示例

from flask import Flask

class DefaultConfig(object):
	DEBUG = True
	SECRET_KEY = 'ST UDJYU E56Y5E'

def create_flask_app(config):				
	app = Flask(__name__)
	app.config.from_object(config)
	app.config.from_envvar('PROJECT_SETTING')
	return app	

app = create_flask_app(DefaultConfig)

@app.route("/", methods=["POST"])
def index():
	return "hello world"

if __name__ == "__main__":
	app.run()

路由

路由

# 查看所有路由
flask routes
app.url_map

# 遍历app.url_map的值, 并用format输出内容格式
for rule in app.url_map.iter_rules():
	print('name={} path={}'.format(rule.endpoint, rule.rule))
# 还可以定义视图完成路由查询业务, 对app.url_map进行操作
@app.route('/'):
def route_map():
	rules_iterator = app.url_map.iter_rules()
	return json.dumps({rule.endpoint: rule.rule for rule in rules_iterator})

指定请求方式

# 默认请求方式有:
GET
OPTIONS ---> "简化版GET,用于询问服务器接口信息""cors跨域请求时, 中间件会验证OPTIONS"
HEAD ---> "简化版GET,只返回响应头,不返回响应体"

# 通过methods参数可以对请求方式进行限制
@app.route("/itcast1", methods=["POST"])
@app.route("/itcast2", methods=["GET", "POST"])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值