「Flask系列」 初识Flask
yuyutoo 2024-12-03 05:44 6 浏览 0 评论
引子
作者有多年的编程打杂经验,之前一直参与基于Java的各种项目以及产品规划与设计,后因自己创业维持一家小公司,有些项目与产品,想降低开发成本,故在公司内部推行基于Python Flask的后端开发。
因作者不是纯技术研究者,一切以结果为导向。故在技术学习以及框架选择上,考虑更多不是纯技术方向,而是从以下几方面考虑。
- 架构的稳定性与安全性
- 选择一个玩具是不行的,必须要对产品以及客户负责,一个健壮的基础架构是必须的
- 学习门槛,以及开发工作的可复制性与成本
- 虽说软件开发是个脑子活动,但很多脚踏实地的工作,还是需要程序员去完成,而项目人员的流动性等决定了,我考虑程序员的学习门槛以及新人参与的难易度
- 不具备大规模展开能力的架构,注定是个玩具
- 开发进度的可控性
- 合同有阶段性,开发进度也必须遵守合同的节点,毕竟生活不易
- 部署维护的简易性
- 这个都懂的,越是小公司越不能靠人来堆,自动化的工具还是必须的
本系列教程也不会以教条技术点罗列展开,而是采用站在全局的角度思考,慢慢填充,添砖加瓦的方式展开,涉及到具体技术点的时候,才会细讲技术。
学习本教程的几个基础
熟悉简单的SQL操做
熟悉前后端分离是什么
熟悉Python的基本语法
Flask吸引我的几个特性
- 真正的微框架
- 各种各样的插件
- 环境简单
作为整体的设计者,很容易按照自己的想法,规划项目的架构以及预留扩展点。
本教程编写过程中为了确保原生态,只参考如下两个网站
Flask 中文文档 【https://dormousehole.readthedocs.io/en/latest/foreword.html#id2】
SQLAlchemy文档 【https://www.osgeo.cn/sqlalchemy/】
本教程的目标
- 实现基本的模块,用户管理
- 基于角色的后台权限管理
- 后台画面的展示与操作
- 给前端提供API支持
- 定时任务
- 邮件功能
- 日志的管理
- 部署
- 项目的运维与监控
第一章正文
抱歉,罗哩罗嗦讲了半天,现在才开始我们实战的项第一部分内容。
为了完成上述本教程的目标,需要使用如下工具
1.我们需要一个数据库存储我们的数据。这里我们选择最简单的sqlite亦或Mysql(因使用SQLAlchemy,故实际开发中区别不大)
2.我们要考虑项目开发者保持同样的依赖库与代码,故选择使用virtualenv与企业内部Gitlab
3.一个趁手IDE,可以选择使用VS Code,亦或PyCharm,此处随意
4.基础的Python 3.*版本,并且设置好环境变量
构建基础项目
Step1:新建一个项目目录例如myproject
在跟目录中追加一个requirements.txt文件,以下内容参考GIF图片(耗时较长,请耐心等待)
Step2: 规划项目目录
- server.py 用于管理项目的唯一启动文件
- config 系统的配置文件路径
- docs 存放项目的一些开发文档
- logs 存放系统日志
- main 主程序目录
- admin 存放供后台管理画面使用的API
- api 存放供其他设备,接入方式使用API
- logic 存放共通的逻辑处理
- models 存放数据库的映射文件
- utils 存放工具类
- static 存放后台管理画面的静态文件,包括图片,css,js
- templates 存放页面的模板文件
构建项目路由以及前两个hello world
我们使用Flask的blueprint技术在整体上将路由规划为
http://**/console/page/**
提供后台画面的URL
http://**/console/api/**
提供后台画面的API
http://**/api/**
存放供其他设备,接入方式使用API
因使用到Flask的脚本支持,故需要在requirements.txt追加一行【Flask-Script==2.0.6】,再次执行pip install -r requirements.txt
编写配置文件
整体上代码结构如图所示
因python项目包目录需要在各个python目录下追加一个__init__.py
config/config.py
# encoding: UTF-8
import os
JSON_AS_ASCII = False
DEBUG = True
# 静态模板路径
TEMPLATES_PATH = os.path.join(os.getcwd(), "templates") + os.path.sep
# 静态资源(css/js/pic)路径
STATIC_PATH = os.path.join(os.getcwd(), "static") + os.path.sep
main/admin/__init__.py
from flask import Blueprint
# 注册两个路由,分别为管理管理的页面管理,以及管理画面的api管理
admin_page_router = Blueprint("admin_page_router", __name__)
admin_api_router = Blueprint("admin_api_router", __name__)
main/admin/urls.py
from main.admin import admin_api_router
# 规划一个api 路径为 /console/api/
@admin_api_router.route('/')
def hello_api():
return 'Hello World From Admin API!'
main/api/__init__.py
from flask import Blueprint
# 注册API路由
api_router = Blueprint("api_router", __name__)
main/api/urls.py
from main.api import api_router
# 规划一个api 路径为 /api/1.0/
@api_router.route('/')
def hello_api():
return 'Hello World From API!'
main/__init__.py
import os
from datetime import timedelta
from flask import Flask
app = Flask(__name__)
app.config.from_pyfile(os.path.join(os.path.abspath('.'), "config", "config.py"))
# 配置静态资源路径
app.static_folder = app.config.get("STATIC_PATH")
# # 模板默认路径
app.template_folder = app.config.get("TEMPLATES_PATH")
# 设置css/js在本地的缓冲时间
if app.config.get("DEBUG"):
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = timedelta(seconds=1)
else:
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = timedelta(hours=1)
# 引入全部Admin路由
from main.admin import admin_api_router, admin_page_router
from main.admin.urls import *
from main.api.urls import *
# 设置蓝图的路由规则
app.register_blueprint(api_router, url_prefix='/api/1.0')
app.register_blueprint(admin_api_router, url_prefix='/console/api')
app.register_blueprint(admin_page_router, url_prefix='/console/page')
server.py
from main import app
from flask_script import Manager, Server
manager = Manager(app)
if __name__ == '__main__':
manager.run()
启动服务器,检查运行状况
- 上一篇:第三课:安装 Flask
- 下一篇:Flask框架简要介绍
相关推荐
- 墨尔本一华裔男子与亚裔男子分别失踪数日 警方寻人
-
中新网5月15日电据澳洲新快网报道,据澳大利亚维州警察局网站消息,22岁的华裔男子邓跃(Yue‘Peter’Deng,音译)失踪已6天,维州警方于当地时间13日发布寻人通告,寻求公众协助寻找邓跃。华...
- 网络交友须谨慎!美国犹他州一男子因涉嫌杀害女网友被捕
-
伊森·洪克斯克(图源网络,侵删)据美国广播公司(ABC)25日报道,美国犹他州一名男子于24日因涉嫌谋杀被捕。警方表示,这名男子主动告知警局,称其杀害了一名在网络交友软件上认识的25岁女子。雷顿警...
- 一课译词:来龙去脉(来龙去脉 的意思解释)
-
Mountainranges[Photo/SIPA]“来龙去脉”,汉语成语,本指山脉的走势和去向,现比喻一件事的前因后果(causeandeffectofanevent),可以翻译为“i...
- 高考重要考点:range(range高考用法)
-
range可以用作动词,也可以用作名词,含义特别多,在阅读理解中出现的频率很高,还经常作为完形填空的选项,而且在作文中使用是非常好的高级词汇。...
- C++20 Ranges:现代范围操作(现代c++白皮书)
-
1.引言:C++20Ranges库简介C++20引入的Ranges库是C++标准库的重要更新,旨在提供更现代化、表达力更强的方式来处理数据序列(范围,range)。Ranges库基于...
- 学习VBA,报表做到飞 第二章 数组 2.4 Filter函数
-
第二章数组2.4Filter函数Filter函数功能与autofilter函数类似,它对一个一维数组进行筛选,返回一个从0开始的数组。...
- VBA学习笔记:数组:数组相关函数—Split,Join
-
Split拆分字符串函数,语法Split(expression,字符,Limit,compare),第1参数为必写,后面3个参数都是可选项。Expression为需要拆分的数据,“字符”就是以哪个字...
- VBA如何自定义序列,学会这些方法,让你工作更轻松
-
No.1在Excel中,自定义序列是一种快速填表机制,如何有效地利用这个方法,可以大大增加工作效率。通常在操作工作表的时候,可能会输入一些很有序的序列,如果一一录入就显得十分笨拙。Excel给出了一种...
- Excel VBA入门教程1.3 数组基础(vba数组详解)
-
1.3数组使用数组和对象时,也要声明,这里说下数组的声明:'确定范围的数组,可以存储b-a+1个数,a、b为整数Dim数组名称(aTob)As数据类型Dimarr...
- 远程网络调试工具百宝箱-MobaXterm
-
MobaXterm是一个功能强大的远程网络工具百宝箱,它将所有重要的远程网络工具(SSH、Telnet、X11、RDP、VNC、FTP、MOSH、Serial等)和Unix命令(bash、ls、cat...
- AREX:携程新一代自动化回归测试工具的设计与实现
-
一、背景随着携程机票BU业务规模的不断提高,业务系统日趋复杂,各种问题和挑战也随之而来。对于研发测试团队,面临着各种效能困境,包括业务复杂度高、数据构造工作量大、回归测试全量回归、沟通成本高、测试用例...
- Windows、Android、IOS、Web自动化工具选择策略
-
Windows平台中应用UI自动化测试解决方案AutoIT是开源工具,该工具识别windows的标准控件效果不错,但是当它遇到应用中非标准控件定义的UI元素时往往就无能为力了,这个时候选择silkte...
- python自动化工具:pywinauto(python快速上手 自动化)
-
简介Pywinauto是完全由Python构建的一个模块,可以用于自动化Windows上的GUI应用程序。同时,它支持鼠标、键盘操作,在元素控件树较复杂的界面,可以辅助我们完成自动化操作。我在...
- 时下最火的 Airtest 如何测试手机 APP?
-
引言Airtest是网易出品的一款基于图像识别的自动化测试工具,主要应用在手机APP和游戏的测试。一旦使用了这个工具进行APP的自动化,你就会发现自动化测试原来是如此简单!!连接手机要进行...
- 【推荐】7个最强Appium替代工具,移动App自动化测试必备!
-
在移动应用开发日益火爆的今天,自动化测试成为了确保应用质量和用户体验的关键环节。Appium作为一款广泛应用的移动应用自动化测试工具,为测试人员所熟知。然而,在不同的测试场景和需求下,还有许多其他优...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)