题图.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: 实际项目中抽象出的小项目设计相关推荐

  1. python项目设计-Python:实际项目中抽象出的小项目设计

    Python: 一周笔记 本文根据实际项目中的一部分api 设计抽象出来,实例化成一个简单小例子,暂且叫作「学生管理系统」. 这个系统主要完成下面增删改查的功能: 包括: 学校信息的管理 教师信息的管 ...

  2. (第七讲)项目中的资源和小实战

    (第七讲)项目中的资源和小实战 今天我们来把剩下的项目的结构彻底分析完,有个小实战.然后再来学一下 Java 的循环控制. 1x0 资源文件夹 res 有个目录叫 res 还一直没分析,里面东西也不少 ...

  3. vue项目中画出优雅的线条(虚线、直线、折线、带箭头、流动效果等)

    需求:运行监控图模块,模块之间用虚线或者实线连接,且带有箭头 实现方法: 1.canvas绘制 2.echarts专业的表格软件(画带箭头的虚线有难度) 3.svg方法 4.leader-line插件 ...

  4. 在vue项目中使用Antv-f2的小案例

    目录 一.两种引入方式 1.浏览器引入 2.通过 npm 安装 二. 两种使用方式 1. 在配置了webpack或使用vue-cli构建的vue项目使用 2. 另一种使用方式是在html中直接使用 三 ...

  5. python ui自动化配置文件,Python+Selenium进行UI自动化测试项目中,常用的小技巧2:读取配置文件(configparser,.ini文件)...

    在自动化测试项目中,可能会碰到一些经常使用的但 很少变化的配置信息,下面就来介绍使用configparser来读取配置信息config.ini 读取的信息(config.ini)如下: [config ...

  6. C++工作笔记-在项目中解决编码问题小技巧

    这里是在项目中看到某大佬是这样用的,在此记录下以后也这样做,方便日后调试. 在linux上,文件有2个类型的编码,一个是UTF-8,一个是ASCII. 在使用QtCreator创建项目的时候默认是UT ...

  7. 在vue项目中使用echarts 阿星小栈

    在后台管理系统中,图表是一个很普遍的元素.目前常用的图标插件有 charts,  Echarts, highcharts.这次将介绍 Echarts 在 Vue 项目中的应用. 安装echarts依赖 ...

  8. uni-app项目中H5跨域小程序不跨域怎么解决方法(兼容H5、小程序)

    解决这个问题的时候还是用到了之前的文章中提到的"条件编译",当然这只是其中一部分, 下面我们来看一下这种问题的解决方法, ①H5端配置 首先在项目中找到一个名为"mani ...

  9. 从政府项目中总结出的B端产品账号权限管理

    工作原因做了一个政府机构的产品,里面涉及账号权限管理,通过做这个项目,总结了一下关于B端产品的账号权限管理方法. 客户需求是建设一个完成政府某些业务流程的一个产品,包括App和Web端, 要求不同单位 ...

最新文章

  1. Open3D 三维点云读取可视化、下采样、去除离群点、地面提取
  2. python培训好学吗-Python0基础好学吗?
  3. TensorFlow——[基本图像分类]fashion-mnist及mnist_reader.py运行错误[TypeError: Invalid dimensions for image data]
  4. 单例-单例设计模式代码实现
  5. hive hql文档_Hive存储过程HQL/SQL(一)–hplsql命令行
  6. PyTorch 1.0稳定版正式发布,并向开发者提供免费AI课程
  7. Windows 2003 Server R2 x64 IIS6.0 eWebEditor无法显示的问题
  8. 拆散组合思路求解期望,方差
  9. Kubernetes网络模型概念
  10. MQTT X Web:在线的 MQTT 5.0 客户端工具
  11. 低代码指南100方案:28高效HR如何做好面试管理,提高招聘效率?
  12. stm32串口通信以及C语言程序里的内存分配
  13. java语言如何将小写字母转化为大写_java中如何把大写字母转换成小写字母,小写字母转换成大写字母...
  14. FAT学习笔记(四)——Dir Entry
  15. 算法竞赛入门经典(第2版)—第五章(C++与STL入门)
  16. js中 ‘ ‘==0 为什么等于true?
  17. 玫瑰花瓣 c4d_在玫瑰周围打花瓣
  18. 先学java还是c_先学C语言还是Java
  19. 上海沙龙回顾 | ​字节跳动在Spark SQL上的核心优化实践
  20. 参悟yield 和yield from (加精)

热门文章

  1. 中原大学 php,中原大学php全集视频教程
  2. java循环队列配对_循环队列 链式队列 的jJAVA实现
  3. Java黑皮书课后题第5章:5.2(重复加法)程序清单5-4产生了5个随机减法问题。改写该程序,使它产生10个随机加法问题,加数时两个1到15之间的整数。显示正确答案的个数和完成测试的时间
  4. 2016年大学计算机期末试题及答案,2016年大学计算机基础试题题库及答案
  5. 心电图前波过多_【动态心电】如何阅读24小时动态心电图?
  6. 单细胞数据整合方法 | Comprehensive Integration of Single-Cell Data
  7. program的发展史与两个数学方法
  8. ssh服务、密钥登陆配置
  9. Data Warehouse Hardware - DW硬件需求计算
  10. 获取3的倍数_获取和设置pdf目录