密码管理器
哎,年紀大了,記個密碼都費勁,每次輸入密碼都要輸入三四遍才能蒙對,以前將所有的密碼全都寫在一個txt中,今天居然忘記放在哪里了!!!,想不到我的記憶居然這樣侮辱我。身為程序員的這輩子都不可能忘記命令行的我于是寫一個密碼管理器。
本著以需求寫程序的原則,接下來說一下我們的需求:
1.創建密碼
2.徐改密碼
3.刪除密碼
4.查詢密碼
emmm,好像是廢話。細化一下
首先看一下我們都保存密碼的什么信息
用戶名:主角
密碼:主角
位置:用于何處
名字:給密碼起一個名字,比如都是騰訊的或者其他意義,之后再查找的時候更加快速
評論:可以說明一下這個密碼的作用
useful:代表這個密碼是有效的
創建一個表格式如下:
create table passaggregate(id int auto_increment,name varchar(20),position varchar(100),username varchar(50),pass varchar(40),useful int,remark varchar(200),primary key(id));
主鍵設置成自增模式
先看創建密碼形如這樣 (仿照docker 的命令行):
pass :代表調用密碼管理器,create :創建一個密碼,接下來還可以輸入很多參數基本都是對應數據表
-name:輸入改密碼的名字
-username:用戶名
-password:密碼
-position:密碼的位置
-remark:對密碼的評論
新建密碼默認可用所以 useful不用輸入
注意:這里的信息不一定填寫完整。
刪除密碼
這里的刪除密碼是偽刪除,考慮到個人密碼并不是很多,不想完全刪除,留作紀念。萬一真要刪錯,我可不想再去重新修改。
useful字段用于管理改密碼是否可用。
那么這里刪除可以看成對字段更改。那就很簡單了
刪除密碼的命令行如下(按照密碼的主鍵來進行刪除的,簡單粗暴):
查詢密碼
刪除密碼需要知道改密碼的主鍵值,所以這里有一個查詢操作四種形式,什么都不填,-a, -l, -al;
查詢所有可用的密碼:pass find
查詢所有的密碼:pass find -a
模糊查詢(作用于 name字段)pasa find -l zhang
模糊查詢所有的密碼(作用于name字段)pass find -al zhang
四種形式。
修改密碼
pass update <主鍵> [-name zhang] [-username xiao] [-password xiao] [-remark ok]
這里處理主鍵其他屬性都可以修改,可以單一修改也可屬性修改。
差不多現在整個程序要做的事情說的差不多了開始上程序了。
兩個文件。一個對數據的操作,根據字符串來判斷調用哪些操作
先看對數據庫的操作
增刪改查(collectPassword):
''' 用于密碼的錄入和顯示 1.密碼的錄入->數據庫 2.密碼的顯示->數據庫 3.刪除和添加密碼功能 4.對密碼的修改 '''import pymysql import sysdef linkDataBase():'''連接數據庫:return:'''username = "root"password = "xiaoliang123"db = pymysql.connect("localhost", username, password, 'mydata')cursor = db.cursor()return (db, cursor)def insertData(item):'''插入一條記錄item 屬于一個map類型的數據結構 里面的鍵值有 name position username pass useful=1 remark:param item::return:'''# 生成數據庫語句sql = "insert into passaggregate(name,position,username,pass,useful,remark) values('{}','{}','{}','{}','{}','{}')".format(item['name'], item['position'], item['username'], item['password'], item['useful'], item['remark'])# print(sql)db, cursor = linkDataBase()cursor.execute(sql)db.commit()cursor.close()db.close()def changData(item):'''更新數據庫:param item::return:'''sql = "update passaggregate set name='{}',position='{}',username='{}',pass='{}',useful='{}',remark='{}' where id={}".format(item[1], item[2], item[3], item[4], item[5], item[6], item[0])# print(sql)db, cursor = linkDataBase()cursor.execute(sql)db.commit()cursor.close()db.close()def searchAllData(useful=1):'''查找所有的數據:return:'''db, cursor = linkDataBase()if useful == 1:sql = "select* from passaggregate where useful=1"else:sql = "select*from passaggregate"cursor.execute(sql)data = cursor.fetchall()cursor.close()db.close()return datadef searchItemData(name, useful=1):'''根據用戶名來查找數據庫:param name::return:'''if useful == 1:sql = "select *from passaggregate where name like '%{}%' and useful=1".format(name)else:sql = "select *from passaggregate where name like '%{}%'".format(name)db, cursor = linkDataBase()cursor.execute(sql)data = cursor.fetchall()cursor.close()db.close()return datadef searchItemById(id):'''根據id來查找,內容:param id::return: 返回一個map值,可以直接用'''db, cursor = linkDataBase()sql = "select*from passaggregate where id='{}'".format(id)cursor.execute(sql)data = cursor.fetchone()# print(data)return list(data)處理字符串的文件(pass.py)
from collectPassword import * import sys# 參數def createFunction(item):'''create 命令:param item::return:'''parameters = ['id', 'name', 'position', 'username', 'password', 'remark', 'useful']# print("createFunction:", item)keys = item[::2]values = item[1::2]if len(keys) != len(values):print("表達式錯誤")return Falseresult = {"name": "", "username": "", "password": "", "useful": "", "position": "", "remark": ""}for key, value in zip(keys, values):key = key.strip('-')if key not in parameters:print("表達式錯誤, 沒有{}".format(key))return False# print(key, ":", value)result[key] = valueresult['useful'] = 1insertData(result)print("創建成功")return Truedef findFunction(item):'''查找命令:param item::return:'''# print("findFunction:", item)# data = Noneif len(item) == 0:data = searchAllData()elif len(item) == 1 and item[0].strip("-") == 'a':data = searchAllData(0)elif len(item) == 2 and item[0].strip("-") == 'l':data = searchItemData(item[1])elif len(item) == 2 and item[0].strip("-") in ["al", "la"]:data = searchItemData(item[1], 0)else:print("表達式錯誤,沒有{}".format(item[0]))return Falsefor line in data:print(line)return Truedef rmFunction(item):'''刪除命令:param item::return:'''# print("rmFunction:", item)data = searchItemById(item[0])data[5] = 0changData(data)print("刪除成功")def updateFunction(item):'''更新命令:param item::return:'''paramters = ['name', 'position', 'username', 'password', 'useful', 'remark']# print("updateFunction:", item)data = searchItemById(item[0])keys = item[1::2]values = item[2::2]keyMap = {"name": 1, "position": 2, "username": 3, "password": 4, "useful": 5, "remark": 6}if len(keys) != len(values):print("表達式有誤")return Falsefor key, value in zip(keys, values):key = key.strip("-")if key not in paramters:print("沒有該參數:{}".format(key))return Falsedata[keyMap[key]] = valuechangData(data)print("更新成功")if __name__ == '__main__':# 命令commands = {'create': createFunction, 'find': findFunction, 'rm': rmFunction, 'update': updateFunction}item = sys.argvcommands[item[1]](item[2:])通過pyinstaller工具,python的一個包pip install pyinstaller 即可 他可以將.py文件編譯成exe文件
cmd中輸入 :pyinstaller pass.py 即可,等待編譯。出現disk的文件夾里面的便是我們的要的程序移動到其他文件夾中。然后設置環境變量。最后可以想使用命令一樣的使用自己寫的程序。
不過話說回來這程序有點,菜的人不會用,強的人不屑用。。。。
不管怎么說反正目前對自己有用就行。以后如果還有什么需求再接著加吧。如果上面的程序有任何問題請及時的聯系我,我會給出答復。
總結
- 上一篇: 蓝牙耳机主动降噪的基础知识介绍
- 下一篇: sdoi2009 [动态规划 状态压缩D