设计出python_Python: 实际项目中抽象出的小项目设计
题图.png
Python: 一周笔记
本文根据实际项目中的一部分api 设计抽象出来,实例化成一个简单小例子,暂且叫作「学生管理系统」。
这个系统主要完成下面增删改查的功能:
包括:
学校信息的管理
教师信息的管理
学生信息的管理
根据Api请求的动作:
POST: 增加信息
GET: 查询信息
PUT: 更新信息
DELETE: 删除信息
可以以下面一个简单的实例看这个系统完成什么样的工作:
from flask import Flask
app = Flask(__name__)
@app.route('/api.example.com', methods=['POST'])
def hello():
return make_response(jsonify(resource=request.json), 200)
if __name__ == "__main__":
app.run()
发送curl 命令:
curl -i http://127.0.0.1:5000/api.example.com -H "Content-Type: application/json" -d '{"usage": "for example", "method": "post", "author": "xiewei"}'
返回结果:
{
"resource": {
"author": "xiewei",
"method": "post",
"usage": "for example"
}
}
其他的动作类似的发送api 请求,完成相应的动作,真实的项目往往后加上数据库的操作。
整个流程主要包括:
restful api 设计
数据表设计
开发:目录的结构、一致性
结果展示
1. Restful API 设计
主要包括URL 设计和 状态码的设计:
CODE
DES
200
成功
404
错误信息
500
服务器错误信息
POST:
Method
URL
Content-Type
Des
POST
/api..example.com//creation
application/json
create info
school_post: "/api.school.example.com/v1/creation"
teacher_post: "/api.teacher.example.com/v1/creation"
student_post: "/api.student.example.com/v1/creation"
GET:
Method
URL
Content-Type
Des
GET
/api..example.com//
application/json
get info
school_get: "/api.school.example.com/v1/name"
teacher_get: "/api.teacher.example.com/v1/name"
student_get: "/api.student.example.com/v1/name"
PUT:
Method
URL
Content-Type
Des
PUT
/api..example.com//
application/json
update info
school_put: "/api.school.example.com/v1/name"
teacher_put: "/api.teacher.example.com/v1/name"
student_put: "/api.student.example.com/v1/name"
DELETE:
Method
URL
Content-Type
Des
DELETE
/api..example.com//
application/json
delete info
school_delete: "/api.school.example.com/v1/name"
teacher_delete: "/api.teacher.example.com/v1/name"
student_delete: "/api.student.example.com/v1/name"
2. 数据库设计
主要包括:表设计,字段类型等的设计,鉴于篇幅有限只展示School 表:
School:
Field
Type
NULL
Key
Default
Extra
Des
id
Integer
Fasle
PRI
NULL
auto_inc
id
name
string
False
NULL
info_name
student_number
Integer
Flase
NULL
number of student
grade
string
False
NULL
grade include
teacher_number
Integer
False
NULL
number of teacher
principal
string
False
NULL
name of principal
vice_principal
string
False
NULL
name of vice_prin
vice_principal_number
Integer
False
NULL
number
slogan
string
False
NULL
slogan
3. 开发
目录结构:考虑两个因素
耦合性
扩展性
数据库操作和业务操作分开,提供接口:
├─api
│ ├─res
│ │ ├─v1
├─cmd
├─data
├─db
├─info
├─models
├─tests
│ ├─api
│ │ ├─res
│ ├─common
└─util
api:数据库API, flask_app api
cmd: 创建数据库操作
data: sqlite 数据表文件
db: 具体数据库增删改查
info: api 传递的body的具体实例
models: 数据库表结构定义
tests: 测试
util: 提供项目公共函数方法
数据库API:
主要使用sqlalchemy 的增删改查进行封装:
- add
- query
- update
- delete
以add 实例:
def add(self, dbt, **body):
try:
self.session.add(dbt(**body))
self.session.commit()
return 'OK'
except Exception as e:
self.session.rollback()
return str(e)
flask_api:
主要使用flask 定义不同动作的接口:
- POST
- GET
- DELETE
- UPDATE
以POST示例:
@app.route('/api..example.com//creation', methods=['POST'])
def post(res, ver):
try:
body = request.json
try:
resource = get_import(res, ver)
if resource:
ack, rt = resource.post(body)
if ack == 'OK':
post_rt = make_response(jsonify(resource=rt), 200)
else:
post_rt = make_response(jsonify(error=str(rt)), 404)
return post_rt
except Exception as e:
return 'body is not valid json'
except Exception as e:
return make_response(str(e), 500)
4. 工具
restful api 发送请求命令工具:
POSTMAN: chrome 浏览器插件
RESTClient: 火狐浏览器插件
服务器端:用curl 命令吧
POSTMAN 示例图:
postman.png
5. 结果展示
发送请求(api) –》 数据库增删改查(数据持久化) –》 返回Json 格式的数据和状态码(展示)
curl -i http://127.0.0.1:5000/api.school.example.com/v1/creation -H "Content-Type: application/json" -d '{"name": "xiewei22","student_number": 1982,"grade": "[G1, G2, G3]","teacher_number": 102,"principal": "xiewei2","vice_principal": "wenlimin2","vice_principal_number": 12,"slogan": "friendly2"}'
result:
{
"resource": [
{
"grade": "[G1, G2, G3]",
"id": 1,
"name": "xiewei22",
"principal": "xiewei2",
"slogan": "friendly2",
"student_number": 1982,
"teacher_number": 102,
"vice_principal": "wenlimin2",
"vice_principal_number": 12
}
]
}
数据库 school 表中插入这条数据,并把插入的数据信息展示出来。
school_post.png
code:
下一篇根据这个项目进行讲解如何进行测试:并讲解python 测试。
unittest
mock
tox
coverage
nose
设计出python_Python: 实际项目中抽象出的小项目设计相关推荐
- python项目设计-Python:实际项目中抽象出的小项目设计
Python: 一周笔记 本文根据实际项目中的一部分api 设计抽象出来,实例化成一个简单小例子,暂且叫作「学生管理系统」. 这个系统主要完成下面增删改查的功能: 包括: 学校信息的管理 教师信息的管 ...
- (第七讲)项目中的资源和小实战
(第七讲)项目中的资源和小实战 今天我们来把剩下的项目的结构彻底分析完,有个小实战.然后再来学一下 Java 的循环控制. 1x0 资源文件夹 res 有个目录叫 res 还一直没分析,里面东西也不少 ...
- vue项目中画出优雅的线条(虚线、直线、折线、带箭头、流动效果等)
需求:运行监控图模块,模块之间用虚线或者实线连接,且带有箭头 实现方法: 1.canvas绘制 2.echarts专业的表格软件(画带箭头的虚线有难度) 3.svg方法 4.leader-line插件 ...
- 在vue项目中使用Antv-f2的小案例
目录 一.两种引入方式 1.浏览器引入 2.通过 npm 安装 二. 两种使用方式 1. 在配置了webpack或使用vue-cli构建的vue项目使用 2. 另一种使用方式是在html中直接使用 三 ...
- python ui自动化配置文件,Python+Selenium进行UI自动化测试项目中,常用的小技巧2:读取配置文件(configparser,.ini文件)...
在自动化测试项目中,可能会碰到一些经常使用的但 很少变化的配置信息,下面就来介绍使用configparser来读取配置信息config.ini 读取的信息(config.ini)如下: [config ...
- C++工作笔记-在项目中解决编码问题小技巧
这里是在项目中看到某大佬是这样用的,在此记录下以后也这样做,方便日后调试. 在linux上,文件有2个类型的编码,一个是UTF-8,一个是ASCII. 在使用QtCreator创建项目的时候默认是UT ...
- 在vue项目中使用echarts 阿星小栈
在后台管理系统中,图表是一个很普遍的元素.目前常用的图标插件有 charts, Echarts, highcharts.这次将介绍 Echarts 在 Vue 项目中的应用. 安装echarts依赖 ...
- uni-app项目中H5跨域小程序不跨域怎么解决方法(兼容H5、小程序)
解决这个问题的时候还是用到了之前的文章中提到的"条件编译",当然这只是其中一部分, 下面我们来看一下这种问题的解决方法, ①H5端配置 首先在项目中找到一个名为"mani ...
- 从政府项目中总结出的B端产品账号权限管理
工作原因做了一个政府机构的产品,里面涉及账号权限管理,通过做这个项目,总结了一下关于B端产品的账号权限管理方法. 客户需求是建设一个完成政府某些业务流程的一个产品,包括App和Web端, 要求不同单位 ...
最新文章
- Open3D 三维点云读取可视化、下采样、去除离群点、地面提取
- python培训好学吗-Python0基础好学吗?
- TensorFlow——[基本图像分类]fashion-mnist及mnist_reader.py运行错误[TypeError: Invalid dimensions for image data]
- 单例-单例设计模式代码实现
- hive hql文档_Hive存储过程HQL/SQL(一)–hplsql命令行
- PyTorch 1.0稳定版正式发布,并向开发者提供免费AI课程
- Windows 2003 Server R2 x64 IIS6.0 eWebEditor无法显示的问题
- 拆散组合思路求解期望,方差
- Kubernetes网络模型概念
- MQTT X Web:在线的 MQTT 5.0 客户端工具
- 低代码指南100方案:28高效HR如何做好面试管理,提高招聘效率?
- stm32串口通信以及C语言程序里的内存分配
- java语言如何将小写字母转化为大写_java中如何把大写字母转换成小写字母,小写字母转换成大写字母...
- FAT学习笔记(四)——Dir Entry
- 算法竞赛入门经典(第2版)—第五章(C++与STL入门)
- js中 ‘ ‘==0 为什么等于true?
- 玫瑰花瓣 c4d_在玫瑰周围打花瓣
- 先学java还是c_先学C语言还是Java
- 上海沙龙回顾 | ​字节跳动在Spark SQL上的核心优化实践
- 参悟yield 和yield from (加精)
热门文章
- 中原大学 php,中原大学php全集视频教程
- java循环队列配对_循环队列 链式队列 的jJAVA实现
- Java黑皮书课后题第5章:5.2(重复加法)程序清单5-4产生了5个随机减法问题。改写该程序,使它产生10个随机加法问题,加数时两个1到15之间的整数。显示正确答案的个数和完成测试的时间
- 2016年大学计算机期末试题及答案,2016年大学计算机基础试题题库及答案
- 心电图前波过多_【动态心电】如何阅读24小时动态心电图?
- 单细胞数据整合方法 | Comprehensive Integration of Single-Cell Data
- program的发展史与两个数学方法
- ssh服务、密钥登陆配置
- Data Warehouse Hardware - DW硬件需求计算
- 获取3的倍数_获取和设置pdf目录