@Art3mk0

Как сделать регистрацию+вход на пайтон?

Здравствуйте!
Суть вопроса, я хочу сделать регистрацию и вход с помощью Пайтон
Допустим если я выберу регестрацию то введу свой логин и пароль и он сохраниться в txt файле
а если вход то тоже пишу логин и пароль и при вводе должны найтись данные из файла и если есть такой логин и пароль то код должен пойти дальше а если нету то вывестись (Вас нету в списке для входа) типа такого буду всем очень благодарен

небольшой тип примера
print('Для входа в систему напишите Вход для регестрации Регестрация!')
vv=input('Вход/Регестрация: ')
if vv==('Вход') or vv==('вход'):
vh=input('Введи логин и пароль: ')
elif vv==('Регестрация') or vv==('регестрация'):
reg=input('Придумай логин и пароль тип ввода(логин/пароль): ')
  • Вопрос задан
  • 6912 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Mootfrost
C#, C++, JS, Python
Вот вам пример авторизации, максимально постарался прокоментировать и солюдать PEP-8.
Еще у вас очень непонятные названия переменных, я так и не понял почему vv и vh.
Надеюсь, будет полезно)
# Тут импорт всех муодулей: хэширование, модуль для работы с файлами на компьюетере(в init_file используется)
import hashlib
import os

"""
Объясняю:
login: str требует, чтобы в функцию передалась только строка.
-> bool говорит о том, что функция возвращает значение типа bool.
Комментарий под функцией добавляет ее описание в подсказки(в pycharm точно добавляеь), да и просто так легче понимать.
Хэширование надо для того, чтобы никто не смог зайти в файл и узнать все пароли, это как бонус к этому примеру.
"""


def init_file():  # Инициализация файла, если этого не сделать програма вылетит м ошибкой, что файла нет
    """Создает файл пользователей"""
    if not os.path.exists('users.txt'):
        with open('users.txt', 'w'):
            pass


def add_user(login: str, password: str) -> bool:
    """Добавляет пользователя в файл"""
    with open('users.txt', 'r') as f:
        users = f.read().splitlines()  # Считываем всех пользователей из файла

    for user in users:
        args = user.split(':')
        if login == args[0]:  # Если логин уже есть, парль не проверяем, шанс взлома увеличится(кто-то мб узнает пароль)
            return False  # Тут можно написать что угодно, будь то HTML статус(409 - conflict), либо просто фразу ошибки

    with open('users.txt', 'a') as f:
        f.write(f'{login}:{password}\n')  # Добавляем нового пользователя
    return True


def get_user(login: str, password: str) -> bool:
    """Проверяет логин и пароль пользователя"""
    with open('users.txt', 'r') as f:
        users = f.read().splitlines()  # Считываем всех пользователей из файла

    for user in users:
        args = user.split(':')
        if login == args[0] and password == args[1]:  # Если пользователь с таким логином и паролем существует
            return True
    return False


def main_loop(login: str):
    """Главный цикл программы"""
    print(f'Привет, {login}!')  # Тут основная часть программы


init_file()

while True:
    print('''Добро пожаловать! Выберите пункт меню:
    1. Вход
    2. Регистрация
    3. Выход''')

    user_input = input()
    if user_input == '1':  # Условия можно заменить на: user_input.lower() == 'вход'
        print('Введите логин:')
        login = input()

        print('Введите пароль:')
        password = input()

        result = get_user(login, hashlib.sha256(password.encode()).hexdigest())

        if result:
            print('Вы вошли в систему')
            break  # Выходим из цикла
        else:
            print('Неверный логин или пароль')

    elif user_input == '2':
        print('Введите логин:')
        login = input()

        print('Введите пароль:')
        password = input()

        print('Повторите пароль:')
        password_repeat = input()

        if password != password_repeat:
            print('Пароли не совпадают!')
            continue

        result = add_user(login, hashlib.sha256(
            password.encode()).hexdigest())  # Вызываем функцию добавления пользователя. И хешируем пароль(безопасность)

        if not result:
            print('Пользователь с таким логином уже существует')
        else:
            print('Регистрация прошла успешно!')

    elif user_input == '3':
        print('Завершение работы')
        break  # Выходим из цикла
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы