Python 如何制作一个基本程序,允许用户登录以前创建的帐户?
我正在尝试制作一个python程序,允许用户注册或登录,目前我正在创建一个文件来存储每个用户名及其密码。现在,它没有写入文件,我想知道是否有人能告诉我我做错了什么。如果这是一个愚蠢的错误,请原谅我,我对python不是很有经验,但我仍然可以编写一个基本程序。这是我的代码:Python 如何制作一个基本程序,允许用户登录以前创建的帐户?,python,Python,我正在尝试制作一个python程序,允许用户注册或登录,目前我正在创建一个文件来存储每个用户名及其密码。现在,它没有写入文件,我想知道是否有人能告诉我我做错了什么。如果这是一个愚蠢的错误,请原谅我,我对python不是很有经验,但我仍然可以编写一个基本程序。这是我的代码: # -*- coding: utf-8 -*- from time import sleep def signin(): usrlist = open("users.txt", 'w+') complete = Fa
# -*- coding: utf-8 -*-
from time import sleep
def signin():
usrlist = open("users.txt", 'w+')
complete = False
while (complete == False):
usr = raw_input("Username: ")
pwd = raw_input("Password: ")
usrinfo = (usr + ":" + pwd)
if (usrinfo in usrlist.read()):
print("Welcome back " + usr + ".")
complete = True
else:
print("Username or Password incorrect. Please try again.")
def signup():
usrlist = open("users.txt", 'w+')
usravailable = False
while (usravailable == False):
newusr = raw_input("Please choose a Username: ")
if (newusr in usrlist.read()):
print("Username taken. Please choose again.")
else:
usravailable = True
newpwd = raw_input("Please choose a password: ")
oldusrlist = usrlist.read()
usrlist.write(oldusrlist + newusr + ":" + newpwd + ".")
print("Thank You. Please Sign in.")
signin()
print("Please Choose An Option:")
print("1. Sign In")
print("2. Sign Up")
inorup = input()
if (inorup == 1):
signin()
elif (inorup == 2):
signup()
此外,如果您对我如何做得更好(即使使用的是不同的语言)有任何建议,谢谢您,我感谢您的帮助
编辑:
如果有人能给我提供关于使用JSON、javascript或多个文件执行类似程序的信息,这些文件可以存储每个帐户的大量数据,请在评论或回答中告诉我如何操作。非常感谢您的帮助。要解决您的不保存问题,您需要进行两项更改: 1) 在signin()例程中,将行“usrlist=open”(“users.txt”,“w+”)更改为“usrlist=open”(“users.txt”,“r”) 2) 在singup()例程中,在“usrlist.write(oldusrlist+newusr+”:“+newpwd+”)行之后添加:“usrlist.close()”
然后您应该能够看到已保存的内容。要解决未保存的问题,您需要进行两项更改: 1) 在signin()例程中,将行“usrlist=open”(“users.txt”,“w+”)更改为“usrlist=open”(“users.txt”,“r”) 2) 在singup()例程中,在“usrlist.write(oldusrlist+newusr+”:“+newpwd+”)行之后添加:“usrlist.close()”
然后您应该能够看到保存的内容。下面是一种使用json的方法
import json
import os
FILENAME = "./f.json"
# init the data file
def init_data():
with open(FILENAME, "wb") as f:
json.dump({}, f)
def load_content():
with open(FILENAME) as f:
infos = json.load(f)
return infos
def save_content(content):
with open(FILENAME, "w+") as f:
json.dump(content, f)
return True
def save_info(username, password):
infos = load_content()
if username in infos:
return False
infos[username] = password
save_content(infos)
return True
def sign_in(username, password,):
status = save_info(username, password)
if not status:
print "username exists"
def login(username, password):
infos = load_content()
if username in infos:
if password == infos[username]:
print "login success"
return True
else:
print "password wrong"
return False
else:
print "no user named %s" %username
if __name__ == "__main__":
# here is some simple test
os.system("rm -f %s" %FILENAME)
if not os.path.exists(FILENAME):
init_data()
# login fail
login("hello","world")
# sign_in
sign_in("hello", "world")
# login success
login("hello","world")
# sign_in fail
sign_in("hello", "world")
# login fail
login("hello", "hello")
下面是一种使用json的方法
import json
import os
FILENAME = "./f.json"
# init the data file
def init_data():
with open(FILENAME, "wb") as f:
json.dump({}, f)
def load_content():
with open(FILENAME) as f:
infos = json.load(f)
return infos
def save_content(content):
with open(FILENAME, "w+") as f:
json.dump(content, f)
return True
def save_info(username, password):
infos = load_content()
if username in infos:
return False
infos[username] = password
save_content(infos)
return True
def sign_in(username, password,):
status = save_info(username, password)
if not status:
print "username exists"
def login(username, password):
infos = load_content()
if username in infos:
if password == infos[username]:
print "login success"
return True
else:
print "password wrong"
return False
else:
print "no user named %s" %username
if __name__ == "__main__":
# here is some simple test
os.system("rm -f %s" %FILENAME)
if not os.path.exists(FILENAME):
init_data()
# login fail
login("hello","world")
# sign_in
sign_in("hello", "world")
# login success
login("hello","world")
# sign_in fail
sign_in("hello", "world")
# login fail
login("hello", "hello")
请修复对齐使用sqlite3存储数据比使用单个文件要好,您可以
导入sqlite3
使用它您需要修复文件模式。我希望这只是一个玩具程序,你实际上不打算像那样存储真正的密码。我想如果你的程序离线了也没那么糟糕。但是,仍然有一些人在所有事情上都使用一个小的密码池,将这些信息存储在一台可能被泄露的机器上是不负责任的。Daoctor-谢谢!顺便说一句,Python2的input
函数是一个安全漏洞。因此(一旦程序的其他问题得到解决)在“请选择一个选项:”提示下,用户几乎可以做任何事情:查看所有其他用户的密码,从硬盘删除文件等。作为安全演示,请尝试输入sleep(30)
在提示下。请修复对齐使用sqlite3存储数据比使用单个文件要好,您可以导入sqlite3
使用它您需要修复文件模式。我希望这只是一个玩具程序,你实际上不打算像那样存储真正的密码。我想如果你的程序离线了也没那么糟糕。但是,仍然有一些人在所有事情上都使用一个小的密码池,将这些信息存储在一台可能被泄露的机器上是不负责任的。Daoctor-谢谢!顺便说一句,Python2的input
函数是一个安全漏洞。因此(一旦您的程序的其他问题得到解决)在“请选择一个选项:”提示下,用户几乎可以做任何事情:查看所有其他用户的密码,从硬盘删除文件等。作为一个安全的演示,请尝试在该提示下输入sleep(30)
。谢谢!这很有帮助,我可以看到它正在工作,但它没有检查已经使用的用户名,它将覆盖以前的数据,我尝试使用append方法打开,但没有工作。要解决这个问题,在你的signup()例程中,将第一行“usrlist=open”(“users.txt”,“w+”)更改为“usrlist=open”(“users.txt”,“r+”)“。作为“w+”意味着打开一个文件进行写入和读取,如果该文件存在,则覆盖现有文件;如果该文件不存在,则创建一个新文件进行读取和写入。我更改为“附加”模式,并添加了其他小更改,效果良好。谢谢你的解决方案。谢谢!这很有帮助,我可以看到它正在工作,但它没有检查已经使用的用户名,它将覆盖以前的数据,我尝试使用append方法打开,但没有工作。要解决这个问题,在你的signup()例程中,将第一行“usrlist=open”(“users.txt”,“w+”)更改为“usrlist=open”(“users.txt”,“r+”)“。作为“w+”意味着打开一个文件进行写入和读取,如果该文件存在,则覆盖现有文件;如果该文件不存在,则创建一个新文件进行读取和写入。我更改为“附加”模式,并添加了其他小更改,效果良好。谢谢你的解决方案。