自动化-day7-Python基础(Redis、加密、mock接口、网络请求)

1、Redis

  Redis是一种非关系型数据库

  与MySQL、orcal、SQLserver等关系型数据库不同之处在于:非关系型数据库Redis数据存放在内存中,且以键值对的方式存储,读写速度很快。

  Redis数据库主要包含string和hash两种数据类型

  a、连接数据库 

1 r = redis.Redis(host='111.111.111.111',
2                 password='HK139bc&*',
3                 port=6379,
4                 db=14,
5                 decode_responses=True#将默认显示从byte类型改为字符类型
6                 )

 

  b、字符串操作

    使用set方法插入数据,get方法取数据,只能插入字符串类型

1 r.set('矿泉水','{"price":111,"count":11}')
2 print(r.get('矿泉水'))

    ※返回为bytes类型,如需改类型需使用decode或encode方法:    

r.set('矿泉水','{"price":111,"count":11}')
data = r.get('矿泉水')

print(data.decode())
s='123123'
print(s.encode())

    使用delete方法删除数据

r.delete('矿泉水')

 

  c、hash类型

    哈希类型不同于字符串的键值对格式,而是name-key-dict的格式,即表名-键-字典的格式

    哈希类型使用方法hset、hget、hgetall插入、读取、读取全部数据

r.hset('students','fd','{"money":19999}')
r.hset('students','ds','{"money":19111999}')
r.hset('students','lhy','{"money":19111999}')
r.hset('students','ljj','{"money":19111999}')

print(r.hget('students','ds'))

    使用hdel方法删除表中数据

r.hdel('students','ds')

    使用delete方法删除整张表

r.delete('students')

    使用expire方法来设置数据过期时间

r.expire('students',100)

 

  d、其他常用方法

print(r.keys())#展示库中所有的key
print(r.keys('s*'))#展示符合条件的kye
print(r.type('stu'))#展示对应数据的类型
print(r.type('students'))
print(r.flushdb()) #清空当前数据库里面所有的key
print(r.flushall())#清空所有数据库里面所有的key

    Redis数据库自带时间戳,可以设置数据过期时间。过期的数据会自动删除。可以在set方法中增加参数设置过期时间。

expire_time = 60 * 60 * 24
r.set('fd_session','sdgx312vsdrq',expire_time)

 

    管道操作

    当需要大量使用Redis操作数据时建议使用管道操作,即将多次操作打包成一次操作,减少访问数据库次数以提升效率。

#管道,批量操作
p = r.pipeline()#建立管道
print(p.exists('students123'))#判断是否存在数据,但由于管道还未执行,所以无返回值
p.hset('students','fd','{"money":19999}')
p.hset('students','ds','{"money":19111999}')
p.hset('students','lhy','{"money":19111999}')
p.hset('students','ljj','{"money":19111999}')
p.hgetall('students')
s = p.execute() #执行,返回一个list,这个list里面是每个命令执行的结果
print(s)
print(r.exists('students123'))

    

 

2、加密操作

  a、md5加密

    md5加密方式无法反向破解,但同样的明文加密后密文也相同,网上破解方法是明文与密文对应破解,无法反向解密。使用时需声明md5模块。

    同样,当用户登录时。会对明文密码加密后与数据库进行对比以完成登录操作。

    Python使用md5加密是需声明hashlib模块,之后使用hashlib.md5方法进行加密

    ※但需要注意的是,md5加密只能操作bytes型数据。

  b、bas64加密

    bas64一般用作数据传输时的加密方式,该方式可以反向破解。使用时需声明base64模块。

    加密时使用base64.b64encode方法,解密时使用base64.b64decode方法

 1 import base64
 2 
 3 #加密
 4 s='dgsdgs2323t牛寒阳'
 5 r = base64.b64encode(s.encode())
 6 print(r.decode())
 7 
 8 #解密
 9 r = base64.b64decode('bGl1aGFpeWFuZzI2NjIzQDQyJCMj5Lit5paH')
10 print(r.decode())

 

3、mock接口

  a、主要使用Fastapi工具,改工具自带接口文档,方便查看。

    使用Fastapi需声明fastapi和uvicorn模块

    写接口时首先调用fastapi创建server

server = fastapi.FastAPI()

    然后创建接口装饰器

@server.get('/login')

    再指定接口的函数、参数及参数类型

def login(username: str, password: str):

    最后在函数中编写逻辑即可

    ※注意在函数中的参数会直接跟在url后,如果想加在body中,需要声明from fastapi import From,并且在函数中增加request及From

      

@server.get('/login')
def login(username: str, password: str):
    if username.strip() and password.strip():
        p = tools.my_md5(password)#使用自定义函数加密password
        query_sql = 'select * from app_myuser where username= "%s" and passwd=%s;' % (username, p)
        if tools.excute(query_sql):#使用自定义函数在数据库执行SQL
            return {'code': '0', 'msg': '登录成功'}
        else:
            return {'code': '-1', 'msg': '输入的用户名/密码错误'}
    else:
        return {'code': '-1', 'msg': '不能为空'}

    运行时使用uvicorn创建服务即可

uvicorn.run(server,port=8888,debug=True,host='0.0.0.0')#host写为0000可以使用本机IP地址访问url,自己访问仍然使用127.0.0.1即可

 

  b、轻量级web开发框架flask

    使用方式与fastapi大体相同,先创建server

     server = flask.Flask(__name__) 

    定义接口

     @server.route('/login',methods=['post','get']) 

    函数定义及参数获取

    ※与fastapi不同,参数来源不需要区别,url或者from_date都可以自动获取

def login():
    username = flask.request.values.get('username','')
    password = flask.request.values.get('password','')
    # flask.json.get('xxxx')#如果入参是json类型的话,这么搞
    # flask.request.cookies.get('xxx')#获取cookie里面的数据
    # flask.request.headers.get('xx')
    # flask.request.files.get("xxx")#文件

    运行时需要执行,debug=True时,代码变更会自动reloading

     server.run(host='0.0.0.0',port=8999,debug=True) 

 

4、网络请求

  主要使用两个模块来做请求url

  a、Python自带的urllib

    urllib是Python自带的请求url模块,但需要将参数转为字符串,再转为bytes才能发送请求。获取请求后还要转成字符串再转成json。

    

 

  b、requests,也是基于urllib的模块,但使用上更加简便

    使用requests发送请求

# get请求
r = requests.get(url,data)
# post请求
r = requests.post(url,json=data)
#Cookie:
cookie  = {'wp-settings-1':'1','PHPSESSID':'xxxxx'}
headers = {
    'user-agent':'xxxx',
    'cookie':'wp-settings-1=libraryContent%3Dbrowse%26posts_list_mode%3Dexcerpt%26editor%3Dtinymce%26post_dfw%3Doff%26imgsize%3Dfull%26editor_plain_text_paste_warning%3D1%26hidetb%3D1; wp-settings-time-1=1573143656; comment_author_8ec14a05b6903cd9021ece26c7b908a0=111; PHPSESSID=2e33445700b8381f67cafb40ee147480'}
r = requests.post(url,data=data,params={"version":1.0},cookies=cookie)
r = requests.post(url,data=data,params={"version":1.0},headers=headers)
#params是把参数传到url后头的
#文件
data = {'file':open('shuaige.xls','rb')}
r = requests.post(url,files=data)

    请求后获取返回值

print(r.json() ) #->字典  #d.get('')
print(r.text) #字符串格式
print(r.content) #bytes类型的
print(r.status_code) #返回的状态码

 

posted @ 2020-09-16 21:32  心淡灬人懒  阅读(215)  评论(0)    收藏  举报