Python 如何制作一个基本程序,允许用户登录以前创建的帐户?

Python 如何制作一个基本程序,允许用户登录以前创建的帐户?,python,Python,我正在尝试制作一个python程序,允许用户注册或登录,目前我正在创建一个文件来存储每个用户名及其密码。现在,它没有写入文件,我想知道是否有人能告诉我我做错了什么。如果这是一个愚蠢的错误,请原谅我,我对python不是很有经验,但我仍然可以编写一个基本程序。这是我的代码: # -*- coding: utf-8 -*- from time import sleep def signin(): usrlist = open("users.txt", 'w+') complete = Fa

我正在尝试制作一个python程序,允许用户注册或登录,目前我正在创建一个文件来存储每个用户名及其密码。现在,它没有写入文件,我想知道是否有人能告诉我我做错了什么。如果这是一个愚蠢的错误,请原谅我,我对python不是很有经验,但我仍然可以编写一个基本程序。这是我的代码:

# -*- 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+”意味着打开一个文件进行写入和读取,如果该文件存在,则覆盖现有文件;如果该文件不存在,则创建一个新文件进行读取和写入。我更改为“附加”模式,并添加了其他小更改,效果良好。谢谢你的解决方案。