关于日志流量监控预警小小项目 | 在flask里面和数据库交互 标准化返回

2022/3/1 19:22:55

本文主要是介绍关于日志流量监控预警小小项目 | 在flask里面和数据库交互 标准化返回,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

在flask里面和数据库交互:

使用orm对数据库进行操纵(orm的底层还是pymysql)

orm: object relational mapping(对象关系映射)

flask不需要和复杂的sql语句打交道 只需要操控orm对象就可以了

orm就是用来将数据库里的表结构映射成模型类

类产生的对象就是数据库里的每一行记录

配置文件setting里面添加数据库配置:

第一行:连接数据库

SQLALCHEMY_DATABASE_URI =用户名:密码@数据库主机/数据库?字符集

之后再model文件夹下面新建一个__init__.py

创建一个db对象 还要将db和app做绑定  并且把表也导入运行

相关的user.py

相当于新建一张user表 而设定的字段如果指定为String类型 则需要指定长度

User里面的每隔class都是一个模型 它都要继承db.Model类

一个类会映射成数据库的一个表

类会实例化 而实例化的每个对象 就是表里面的一行记录

user.py里面: 新增用户

然后把蓝图绑定到app上面

用动态url实现删除

User.query.get()使用get查找,只针对主键 get的时候只能get到第一个 所以只能单条操作

改:还是一样只能修改一条

查:

在浏览器输入url请求会发生什么?

客户端发起请求

服务器收到请求    解析http包头(包头部字段有url和请求方法)   拿到body数据

通过url和请求方法来进行判断处理

  1. 通过url来在url_map表里找到对应的endpoint

view_function表里找到对应的视图函数

  1. 判断请求方法是否正确

调用相应的视图函数做处理

可通过request对象对传入的参数进行获取

也可以通过动态url进行参数获取

如果有数据库的操作 就导入相应的模型类

这里通过操控orm对象来操控数据库,实现数据库的增删改查

对于查询操作,数据库的对象不能直接返回,需要对它进行序列化

需要相应的格式转化,建议使用json

返回相应api数据

关于序列化操作可以直接放在user.py的类里面

于是这边就不需要我们手动返回了

将单个查询和全部查询放在一个函数里

操纵数据库的时候一定要记得提交

项目需要统一返回标准化:

返回成json格式     

需要返回状态码(status):定义程序的逻辑状态

还有message 解释状态码的意思

data 请求返回的数据 数据全部放在data里面

一般格式:{“status”:10000,“message”:“数据请求成功!”,“data”:[]}

于是把这个作为一个公共的设定 定义一个新的文件夹libs(存放公共函数)

然后创建一个utils(里面存放所有的工具)

这样就可以达到标准化 规范化

启动项目:

  1. 立项  成立项目组 做好职责划分
  2. 需求收集  需求分析
  3. 设计这个项目 产品原型图  数据库设计,接口设计(url 传参)
  4. 写代码
  5. 测试上线

Flask提供接口 可以添加监控项 也可以展示监控项

因为我们现在没有前端 所以我们后面的展示操作等 都只能通过接口完成

对于普通用户而言,自己添加的监控项只有自己能看

对于管理员来看,所有的监控下都能看

对于项目user时 用户密码建议哈希存入  角色的话建议设置成枚举型

monitor里面存放的是监控表

表与表之间建立关系 (一定要设置外键)

在model的user.py里面跟monitor表创建连接

在命令行里面 帮助管理flask的工具:flask-scrip

安装好了之后 我们舍弃server.py 新建了一个manage.py

现在我们的主程序 核心对象 都交给了manage.py 了

现在python manage.py就相当于一个命令了 还可以接参数 不过也是默认启动了

所以我们需要用命令行去指定端口 路径等

命令行启动程序:python manage.py runserver -h 192.168.0.25 -p 8000

python manage.py有三个参数

db

runserver:启动

shell:运行一个python的shell程序

相当于进入app的内部

在这里操控的一切东西都是操控app

这样是的对象里面多了一个monitor属性  monitor属性里面就包含了user的id(因为id被设置成了外键)相同的监控项(也就是monitor表里的数据)

用户通过monitor属性来找到监控

monitor表又添加了反向查询user  moniter的对象可以通过user属性来找到用户

这个关系不是数据库的 是orm的  就不用再连表查询了

把api更加规范化:flask-restful(是一种软件适用风格)(面试常考)

restful:

#REST(representational state transfer)(api的设计方式):表现层状态转移

这不是必须的 它只是一种通用的软件设计风格

通俗来讲就是 资源在网络中以某种表现形式进行状态转移

resource:资源  也就是数据  如用户数据就是一类资源 监控数据是一类资源

representational:某种表现形式 如JSON,html

state tranfer:状态转移。通过http方法实现(其实就相当于对用户进行增删改查 要用http的动词实现 这是rest的使用规则)

如 没有使用rest :                     使用了rest那么url就只有两个或一个了

(不同方法做不同的事情)

       /user就是一类资源                        /user       /user/id

       /user/add                                      post方法

       /user/delete                                  delete方法

       /user/update                                 update方法

       /user/get                                      get方法

按照资源来划分url,没有必要根据动作再来划分了

每一类资源给一个或两个url     通过http的不同方法来实现对这类资源的增删改查

符合rest原则的架构 我们称之为restful架构

这个还携带版本号 规定了api应该怎么设计 规定了相应格式 规定了状态码等等

每一个url就代表一种资源

客户端通过四个http方法对服务器资源进行操作

比如 对于用户这一类资源(id是user的数据库存储的id)

GET  /v1/user   获取所有用户

GET  /v1/user/id 获取某个用户(v1是版本号  2代表id)

POST /v1/user  新增用户

PUT /v1/user/id  新增用户

DELETE  /v1/user/id 删除用户

现在可以通过server.py去运行 也可以通过命令行去运行

对于python调用Linux命令    推荐使用subprocess

查询是最容易考的!!!!!

按条件查询:

精确查询filter_by    模糊查询filter

Filter_by没有filter灵活

多条件:

排序:

限制:

查询小结:

查询小总结:

1.User.query.all() 所有

2.User.query.get(pk) 一个

3.User.query.filter()

如果要检索的字段是字符串(varchar,db.String)

User.username.startwith('')

User.username.endwitd('')

User.username.contains('')

User.username.like('') 传入的参数需要加%

User.username.in_(['','','',''])

User.username==

如果要检索的字段是整型或日期类型:

User.age.__lt__(18) 双下划线

User.rdatetime.__gt__('.....')

User.age.__le__(18)

User.age.__ge__(18)

User.age.between(18,25)

多个条件一起检索:and_ or_

非得条件:or_

排序:order_by()

获取指定数量:limit() offset()

4.User.query.filter_by(username='xxx') User.query.filter(username== 'xxx')

删除

两种删除:

1.逻辑删除,其实就是更新(定义数据库中的表的时候,添加一个字段名为isdelete,通过此字段控制是否删除)

id=request.args.get(id) 用于接收get请求中的参数

user=User.query.get(id)

user.isdelete=True

db.session.commit()

2.物理删除(彻底从数据库中删除)

id=request.args.get(id) 用于接收get请求中的参数,若为post就把args替换成form

user=User.query.get(id)

db.session.delete(user)

db.session.commit()

3.更新

id=request.args.get(id)

user=User.query.get(id)

#修改对象的属性

user.username=xxx

user.phone=xxx

#提交修改

db.session.commit()

需要提交:

添加

user=User()

user.xxx=xxx

db.session.add(user)

db.session.commit()

删除

user=User.query.get(id)

db.session.delete(user)

db.session.commit()

更新

user=User.query.get(id) #获取数据库中的对象

#修改对象的属性

user.username=xxx

user.phone=xxx

#提交修改

db.session.commit()

标准化返回:

我们项目一般都会准备一个说明文档(就可以直接把项目文档提取一部分放入说明文档就好),整理说明文档很重要(说明文档就是给别人用的)

请求参数就是url传值问号后面传入的变量

返回的参数也就是说明我们返回什么内容

网络上传输一般是使用字符串形式 而json格式就是很轻易的把字符串格式和所需对象进行转换  规范是约定俗成返回json格式

http的状态码只关注这次请求是否成功连接得到数据 而不关注得到的数据是否是我们需要的 于是我们每个应用程序都会拥有自己的状态码

(然后可以通过描述信息message去看我们是哪种类型的失败)



这篇关于关于日志流量监控预警小小项目 | 在flask里面和数据库交互 标准化返回的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程