iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >我的python学习--第十四天(一)
  • 805
分享到

我的python学习--第十四天(一)

第十四天python 2023-01-31 02:01:01 805人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

一、运维管理系统(基于flask)回顾1、权限控制  通过session实现权限控制,session是一个全局字典,当用户登录时,可以获取到用户的用户名,通过查找数据库获取用户的权限保存进session中,在每次页面跳转时同过查询sessi

一、运维管理系统(基于flask)回顾


1、权限控制

  通过session实现权限控制,session是一个全局字典,当用户登录时,可以获取到用户的用户名,通过查找数据库获取用户的权限保存进session中,在每次页面跳转时同过查询session中的权限实现权限管理。


2、base64和md5加密方式的区别

 在用户添加和登录中使用到了md5加密,md5属于单向加密,是不可逆的,数据库密码保存的是加密后的字符串。同时可以通过加盐的方式提高密码的安全

from hashlib import md5
... ...
passWord = md5(request.fORM.get('password')+salt).hexdigest()


  在token中使用的就是base64加密算法,base64属于对称加密,可以进行解密

import base64,time,random
... ...
token = base64.b64encode('%s|%s|%s|%s|%s'% (name,uid,role,str(random.random()),int(time.time()+7200)))
... ...
key = base64.b64decode(token)


3、各种前端插件

  •   sweetalert:一款不需要Jquery支持的原生js提示框,显示更优雅

  •   datatables:一款jQuery表格插件,可以实现分页,即时搜索和排序

  •   Validform:表单验证插件,对输入值进行简单验证

  •   highcharts,echaets:数据可视化插件

  •   multiselect:下拉多选插件,使下拉菜更优雅



二、使用echarts绘制中国地图


  实例:获取网站访问用户的全国分布图  

  方法:读取Nginx的访问日志,从nginx日志中通过split()函数获取访问用户的ip地址,将获取的ip进行统计,获取一个dict,key是ip地址,value是ip出现次数,使用阿里或百度提供的api接口,通过ip地址获取到真是的地址并在echarts的中国地图上显示。


# 从nginx日志获取所有的ip地址
res = {}
for line in open('log.log'):
    tmp = line.split(' ')
    ip = tmp[0]
    res[ip] = res.get(ip,0)+1
# 通过baidu的api获取到真实地址、经纬度,并一起写入数据库
token = 'q5mTrTGzCSVq5QmGpI9y18Bo'
 
for key,val in res.items():
    url = 'Http://api.map.baidu.com/location/ip?ak='+token+'&ip=%s&coor=bd09ll'%(key)
    r = requests.get(url)
    geo_data = r.JSON()
    if geo_data['status']==0:
        tmp = (key,geo_data['content']['address_detail']['province'],geo_data['content']['point']['x'],geo_data['content']['point']['y'],val)
        sql = 'insert into log_map(ip,province,geox,geoy,count) values ("%s","%s","%s","%s",%s)'%tmp
        cur.execute(sql)
# 回调函数
@app.route('/mapdata')
def mapdata():
   if not session.get('name'):
        return redirect("/login")
   # 获取所有省份和对应的范围次数,由于是根据ip进行入库,多个ip可能属于同一个省份,故结果需要去重
   fields = ['province','count']
   data = db.list('log_map',fields)   
   
   # 相同省份的次数累加,最终结果res = {'北京':40,'上海':50,.....}
   res = {}
   for x in data:
       p_name = x['province']
       res[p_name]=res.get(p_name,0)+x['count']

   # 将数据拼接为echart匹配的格式 [{'name':'北京','value':40},{'name':'上海','value':40},...]
   result = []
   for k,v in res.items():
       tmp={}
       # 去掉多余的后缀
       tmp['name'],tmp['value']=k.rstrip('省市回维吾尔壮族自治区'),v
       result.append(tmp)
   print result
   mapdata = {'code':0,'result':result}
   return  json.dumps(mapdata)



三、工单系统

 

  流程:用户提交工单请求(工单类型,请求内容),发送邮件给管理员,管理员收到邮件后对工单进行处理,并发邮件给工单申请人告知可以执行,申请人执行后再次发送邮件给管理员报告执行完毕,管理员根据执行的结果,对工单进行处理(成功或失败),并对工单进行处理反馈。


工单申请

@app.route("/jobadd/",methods=['GET','POST'])
@login_request.login_request
def jobadd():
    name = session.get('name')
    id = session.get('id')
    if request.method == 'GET':
        return render_template('/job/jobadd.html',info = session,role = session.get('role'))
    else:
        # 获取申请类型和请求内容
        data = dict((k,v[0]) for k,v in dict(request.form).items())
        # 添加申请人
        data['apply_persion'] = name
        
        # 请求内容不能为空,将数据保存到数据库
        if not data['apply_desc']:
            return json.dumps({'code':1,'errmsg':'job description can not be null'})
        conditions = [ "%s='%s'" %  (k,v) for k,v in data.items()]
        db.add('ops_jobs',conditions)
        
#       # 获取申请人信息
#        user = db.list('users',fields_user,id)
#       # 从用户列表获取邮箱账号和密码(暂时没有)
#        email,passwd = user['email'],user['password']
#       # 发送邮件(需要发件人账号密码,密码,收件人,正文)
#        myMail.mymail(email,passwd,localemail,data)

        return json.dumps({'code':0,'result':'apply job success'})


工单处理

# 修改工单状态
''' 
{'0':'未处理','1':'处理中','2':'完成','3':'失败'}
'''
@app.route('/update_status/',methods=['POST'])
@login_request.login_request
def update_status():
    data = dict((k,v[0]) for k,v in dict(request.form).items())
    res = {}    
    if data['status'] == '1':
        # 当工单为未处理状态时,第一次对工单处理,只添加处理人信息
        data['deal_persion'] = session.get('name')
    else:
        # 第二次处理则添加处理结束的时间信息
        data['deal_time'] = time.strftime(ISOTIMEFORMAT,time.localtime())


    conditions = [ "%s='%s'" %  (k,v) for k,v in data.items()]
    db.update('ops_jobs',conditions,data['id'])
    return json.dumps({'code':0,'result':'execute completed!'})


显示工单时,只需要根据工单的状态‘0’,‘1’为工单申请列表,‘2’,‘3’则为工单的历史列表

工单申请列表需通过申请时间倒序排序,同理,历史列表通过处理结束时间倒序排序,让列表一目了然


在工单处理时,可以根据当前的状态,对操作进行隐藏,减少很多不必要的麻烦

{% if job.status == 0 %}
<button data-id='`job`.`id`' class='btn btn-info exec'>处理</button>
<button data-id='`job`.`id`' disabled='disabled' class='btn btn-success complete'>完成</button>
{% elif job.status == 1 %}
<button data-id='`job`.`id`' disabled='disabled' class='btn btn-info exec'>处理中</button>
<button data-id='`job`.`id`' class='btn btn-success complete'>完成</button>
{% endif %}


效果图

wKiom1gZqceSTaHQAABVW-39ne0346.png



四、模拟面试总结


非常感谢小飞同学的记录,总结见附件。


--结束END--

本文标题: 我的python学习--第十四天(一)

本文链接: https://www.lsjlt.com/news/186790.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 我的python学习--第十四天(一)
    一、运维管理系统(基于Flask)回顾1、权限控制  通过session实现权限控制,session是一个全局字典,当用户登录时,可以获取到用户的用户名,通过查找数据库获取用户的权限保存进session中,在每次页面跳转时同过查询sessi...
    99+
    2023-01-31
    第十四天 python
  • 我的python学习--第十一天
    上午:作业讲解bootstrap-multiselect插件sweetalert插件下午:datatables----表格插件datetimepicker----时间插件Validform----表单验证插件锁定用户禁止登录---...
    99+
    2023-01-31
    第十一天 python
  • 我的python学习--第四天
    一、首先是对前三天的学习内容进行复习  1、python基础的数据结构      数字(int/float,包括整数和浮点数)          布尔(boolean => True/False)      字符串(str,使用''或...
    99+
    2023-01-31
    第四天 python
  • 我的python学习--第十三天
    nginx + uwsgi + flask一、安装1、安装uwsgi[root@yaoliang day_13]# wget http://projects.unbit.it/downloads/uwsgi-2.0.4.tar.gz [ro...
    99+
    2023-01-31
    第十三天 python
  • 我的python学习--第十二天(二)
    Python异常处理  Python的异常处理能力是很强大的,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行操作。所有异常都是基类Exception的成员,所有异常都从基类Exception继承,而且都在excepti...
    99+
    2023-01-31
    二天 python
  • python 学习第四天
    目录 基本运算符 算术运算符 比较运算符 赋值运算符 逻辑运算符 身份运算符 pyth...
    99+
    2023-01-31
    第四天 python
  • 学习python的第二十一天(hashl
    1.hashlib模块(文件传输中将传输内容用指定算法进行处理) hash是一种算法(Python3.版本里使用hashlib模块代替了md5模块和sha模块,主要提供 SHA1、SHA224、SHA256、SHA384、SHA512、...
    99+
    2023-01-31
    python hashl
  • 学习python的第二十一天(loggi
    1.logging模块 用于程序的运行日志 1.初级 #首先程序运行分会出现5中情况 1.logging.info('info') #程序正常运行级别为10 2.logging.debug('debug') #程序调试...
    99+
    2023-01-31
    python loggi
  • 学习python的第十四天(可变长参数,
    一.可变长参数 1.可变长形参之(*) 形参中的会将溢出的位置实参全部接收,然后存储元组的形式,然后把元组赋值给后的参数。需要注意的是:*后的参数名约定俗成为args。 def sum_self(*args): res = 0 ...
    99+
    2023-01-31
    变长 参数 第十四天
  • 我的python学习--第五天
    一、函数的定义:  def 函数名(name,age=20,*params):    函数体    return 返回值  示例:def hello():     print 'hello world'               # pr...
    99+
    2023-01-31
    第五天 python
  • 我的python学习--第三天
    第三天  1:列表及Python基础回顾  2:字典 列表字典生成式及应用场景  3:字符串 字典字符串转换及应用场景  4:文件操作 文件字典转换及应用场景  5:总结基础数据结构的知识脑图 -- 增删查改1、列表的操作:  help(l...
    99+
    2023-01-31
    python
  • 学习python的第四天(python的
    一.Jupyter的安装以及运行 1.Jupyter的安装 运行CMD,在CMD中输入pip3 --default-timeout=100 install -U jupyter 再输入pip3 install jupyter_contr...
    99+
    2023-01-31
    第四天 python
  • 学习python的第二十天(dateti
    1.datetime模块(用于修改日期) import datetime print(datetime.datetime.now(),type(datetime.datetime.now())) 2019-06-10 19:37:55....
    99+
    2023-01-31
    十天 python dateti
  • 我的python学习--第七、八天
    Flask的HTTP方法HTTP(与web应用会话的协议)有许多不同的URL方法。默认情况下,路由只回应GET请求,但是通过route()装饰器传递methods参数可以改变这个行为。HTTP方法告知服务器,客户端想对请求的页面 做些什么。...
    99+
    2023-01-31
    python
  • 学习python的第十一天(集合数据类型
    1.集合数据类型 1.定义 用{}中间值用,隔开,且集合中元素排列是无序的,而且如果有相同元素会只保留一个 2.算法 1.必须掌握 1.长度len set_1 = {1,2,3,4,5} print(len(set_1)) #5 2.成...
    99+
    2023-01-31
    数据类型 第十一天 python
  • 学习python的第二十天(json模块
    1.josn模块(用于指定数据类型文件快速读写修改) 1.指定的数据类型 dict(字典) str(字符串) int/float(整型/浮点型) bool中的False,True,None 2.dumps/loads loads 用于内...
    99+
    2023-01-31
    十天 模块 python
  • 学习python的第二十天(time模块
    1.三种时间的显示样式 1.时间戳 1.相关函数 1.time() 2.显示样式 import time print(time.time()) #1560150343.5837357 距离计算机元年1970年1月1日00:00:0的过...
    99+
    2023-01-31
    十天 模块 python
  • 学习python的第十二天(编码,解码,
    1.编码解码 1.字符串编码 字符 --------》翻译过程 -------》数字 2.字符串解码 字符 --------》翻译过程 -------》数字 3.编码解码用到的翻译工具 中国:GBK 外国:日本—Shift_JIS,美国...
    99+
    2023-01-31
    二天 python
  • 学习python的第二十天(os模块,s
    1.os模块(功能类似操作系统与文件交互) 1.常用模块功能 1.创建文件 1.mkdir 2.移除文件 1.remove 删除指定文件 2.rmdir 删除单级空目录,若目录不为空则无法删除 3.removedirs 若目录为空,则删...
    99+
    2023-01-31
    十天 模块 python
  • 学习python的第十九天(包,软件开发
    1.包 1.什么是包 包是模块的一种形式,包的本质就是一个含有__init__.py的文件的文件夹 2.为什么用包 当一个模块功能太多的时候不方便进行管理,我们用包来进行管理 3.包的使用 1.导入包发生的三件事 创建一个包的名称空间...
    99+
    2023-01-31
    软件 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作