关于日志流量监控预警小小项目 |
您所在的位置:网站首页 › linux系统日志在哪看 › 关于日志流量监控预警小小项目 |
在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和请求方法来进行判断处理 通过url来在url_map表里找到对应的endpointview_function表里找到对应的视图函数 判断请求方法是否正确调用相应的视图函数做处理 可通过request对象对传入的参数进行获取 也可以通过动态url进行参数获取 如果有数据库的操作 就导入相应的模型类 这里通过操控orm对象来操控数据库,实现数据库的增删改查 对于查询操作,数据库的对象不能直接返回,需要对它进行序列化 需要相应的格式转化,建议使用json 返回相应api数据 关于序列化操作可以直接放在user.py的类里面 于是这边就不需要我们手动返回了 将单个查询和全部查询放在一个函数里 操纵数据库的时候一定要记得提交 项目需要统一返回标准化: 返回成json格式 需要返回状态码(status):定义程序的逻辑状态 还有message 解释状态码的意思 data 请求返回的数据 数据全部放在data里面 一般格式:{“status”:10000,“message”:“数据请求成功!”,“data”:[]} 于是把这个作为一个公共的设定 定义一个新的文件夹libs(存放公共函数) 然后创建一个utils(里面存放所有的工具) 这样就可以达到标准化 规范化 启动项目: 立项 成立项目组 做好职责划分需求收集 需求分析 设计这个项目 产品原型图 数据库设计,接口设计(url 传参)写代码测试上线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去看我们是哪种类型的失败) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |