DAY29のGitにpushしたので結果的にソース一緒になってしまいましたが…
前回のパスワード管理ツールにsearchボタンを追加して、
websiteに入力されたサイトにパスワードが保存されていれば
表示する機能を追加します。
searchボタンを追加し、レイアウトをし直す
website_area = Label(text="website", font=("Futura", 15, "italic"),anchor="w")
website_area.grid(row=1, column=0)
website_input = Entry(textvariable="website url", width=26)
website_input.grid(row=1, column=1, sticky="w")
search_btn = Button(text="search", command=pass_search, width=10)
search_btn.grid(row=1, column=2, sticky="w")
user_area = Label(text="user/email", font=("Futura", 15, "italic"),anchor="w")
user_area.grid(row=2, column=0)
user_input = Entry(textvariable="user", width=40)
user_input.grid(row=2, column=1, columnspan=2, sticky="w")
pass_area = Label(text="password", font=("Futura", 15, "italic"),anchor="w")
pass_area.grid(row=3, column=0, )
pass_gen_btn = Button(text="generate", command=gen_pass, width=10)
pass_gen_btn.grid(row=3, column=2, sticky="w")
pass_input = Entry(width=26)
pass_input.grid(row=3, column=1, sticky="w")
searchボタンをwebsiteインプットの横に配置するので、
他のボタンを調整します。主にcolumnspan部分。
csvからjsonに保存ファイルを変更する
検索しやすいようにjsonファイルでの保存に変更します。
def pass_add():
website = website_input.get()
user = user_input.get()
password = pass_input.get()
new_data = {
website : {
"user" : user,
"password" : password,
}
}
if website == "" or user == "" or password =="":
messagebox.showinfo("Alert", "Fill All Input!")
else:
try:
with open("pass_list.json", "r") as json_data:
data = json.load(json_data)
except FileNotFoundError:
with open("pass_list.json", "w") as json_data:
json.dump(new_data, json_data, indent=4)
else:
data.update(new_data)
with open("pass_list.json", "w") as json_data:
json.dump(data, json_data, indent=4)
finally:
messagebox.showinfo("Alert", "Password Added!")
website_input.delete(0, END)
pass_input.delete(0, END)
user_input.delete(0, END)
website_input.focus()
new_dataの辞書リストでjsonに追加するようにデータを整えます。
次にtry、except、else、finallyを勉強がてら追加。
tryでpass_list.jsonを開き、ない場合はexceptを起動して最初のデータとしてnew_dataを入力します。
tryが成功した場合はすでにファイルがある状態なので、elseを起動。
data.update(new_data)でjsonの状態を追加した状態に更新してから
json.dumpで保存します。
jsonへの保存がこれで終わったので、
修正前と同じくfinally部分でアラートを追加して入力したデータを全て削除・
ウェブサイトのインプットがクリックされた初期状態に戻ります。
searchボタンの機能を実装する
入力したwebsite部分をgetし、jsonの中にあるかどうかをif ... in ... で確認。
あれば保存したuserとpasswordをアラートで表示するようにします。
def pass_search():
website = website_input.get()
try:
with open("pass_list.json") as data:
df = json.load(data)
except FileNotFoundError:
messagebox.showinfo("Alert", "Create first password.")
else:
if website in df:
messagebox.showinfo("Alert", f'user:\n{df[website]["user"]}\npassword:\n{df[website]["password"]}')
else:
messagebox.showinfo("Alert", "No User/Password exists.")
これで機能追加完了。
website部分に文字補完機能とかできればいいな。。。
Gitはこちら