百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

「Flask系列」 初识Flask

yuyutoo 2024-12-03 05:44 4 浏览 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()

启动服务器,检查运行状况


相关推荐

TCP协议原理,有这一篇就够了

先亮出这篇文章的思维导图:TCP作为传输层的协议,是一个软件工程师素养的体现,也是面试中经常被问到的知识点。在此,我将TCP核心的一些问题梳理了一下,希望能帮到各位。001.能不能说一说TC...

Win10专业版无线网络老是掉线的问题

有一位电脑基地的用户,使用...

学习计算机网络需要掌握以下几方面基础知识

计算机基础知识操作系统:了解常见操作系统(如Windows、Linux)的基本操作和网络配置,例如如何设置IP地址、子网掩码、网关和DNS服务器等,以及如何通过命令行工具(如ping、tr...

网络工程师的圣经!世界级网工手绘268张图让TCP/IP直接通俗易懂

要把知识通俗地讲明白,真的不容易。——读者说TCP/IP从字面意义上讲,有人可能会认为TCP/IP是指TCP和IP两种协议。实际生活当中有时候也确实就是这两种协议。然而在很多情况下,它只是...

三分钟了解通信知识TCP与IP协议(含“通信技术”资料分享)

TCP/IPTCP/IP分层模型①应用层...

网闸与防火墙:网络安全设备的差异与应用

在网络安全领域,网闸(安全隔离网闸,GAP)和防火墙(Firewall)是两类重要的防护设备。尽管它们都服务于网络安全防护,但在设计理念、技术原理、安全效能及适用场景等方面存在显著差异,以下从五个维度...

S7-300的TCP/IP通信

一、首先在项目中创建2个S7-300的站点;二、硬件组态中,设置合适的TCP/IP地址,在同一网段内;...

西门子S7-1500 PLC的 MODBUS TCP通信

MODBUSTCP使MODBUS_RTU协议运行于以太网,MODBUSTCP使用TCP/IP和以太网在站点间传送MODBUS报文,MODBUSTCP结合了以太网物理网络和网络标准TC...

系统规划与管理师新版备考必备:第7章考点思维导图解析

备考系统规划与管理师的小伙伴们,福利又来啦!今天为大家带来《系统规划与管理师(第2版)》第7章考点的思维导图,助你高效梳理重点,让备考更有方向!...

TCP/IP、Http、Socket 有何区别与联系?

HTTP协议对应于应用层,Socket则是对TCP/IP协议的封装和应用(程序员层面上)。HTTP是应用层协议,主要解决如何包装数据。而我们平时说的最多的Socket是什么呢?实际上...

西门子PLC串口协议与以太网通信协议对比

西门子plc品牌众多,通信协议的类型就更多了,具体可分为串口协议和以太网通信协议两大类。...

网络编程懒人入门(十三):一泡尿的时间,快速搞懂TCP和UDP的区别

本文引用了作者Fundebug的“一文搞懂TCP与UDP的区别”一文的内容,感谢无私分享。1、引言...

程序员必备的学习笔记《TCP/IP详解(一)》

为什么会有TCP/IP协议在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别。就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样...

一文读懂TCP/IP协议工作原理和工作流程

简述本文主要介绍TCP/IP协议工作原理和工作流程。含义TCP/IP协议,英文全称TransmissionControlProtocol/InternetProtocol,包含了一系列构成互联网...

如何在 Windows 10 和 Windows 11 上重置 TCP/IP 堆栈

传输控制协议/Internet协议,通常称为TCP/IP,是您的WindowsPC如何与Internet上的其他设备进行通信的关键部分。但是当事情出错时会发生什么?你如何解决它?幸运的...

取消回复欢迎 发表评论: