UdemyでPythonを勉強した結果を残すブログ。

40歳でプログラミング始めて転職までいけるのかを実録してみます。

DAY30 パスワード管理・作成ツールに保存しているパスワードを表示する機能を作る!try,except,else,finallyの勉強も

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はこちら

github.com