Проверка наличия пользователя по базе данных Python
Возможно, покажусь тупым, что ну вообще, но не могу разобраться с этой задачей уже несколько дней ( учу недавно Python). Есть задание: проверить username по базе и если его там нет, то нужно вывести приветствие, на подобии "Вы у нас недавно, добро пожаловать"! А если он там есть, то вывести дату его последнего захода.
Если с момента последнего введения логина прошло более 180 дней, вывести сообщение: «Вам надо подтвердить логин», если меньше 180 дней, то вывести: «Ваш аккаунт подтвержден до...» и вместо многоточия сегодняшняя дата + 180 дней.
Код присутствует ( в разных файлах )
Коротко о том, как работает программа:
Мы вводим email и он проверяется на наличие символа "@", если его нет, вводим заново. Если есть, то делаем из почты логин путем обрезания всего до символа @ и перевода в нижний регистр всех символов
Далее выводятся все юзеры, которые уже есть в базе их последняя дата захода Нужно проверить наш логин с логинами из базы и если есть, то вы уже знаете, читайте выше. Я пытался решить все разными способами, перечитывал материал, который у меня есть, пробовал str.find()
1)learn.py
from auth import get_email, make_username
from datetime import datetime as dt, timedelta
from db import query_user_last_seen, list_users
email = get_email()
username = make_username(email)
print("Ваш логин: " + username)
registered_users = list_users()
i = 0
while i < len(registered_users):
username = registered_users[i][0]
last_seen = registered_users[i][1]
i = i + 1
print(i, username, last_seen.date())
existing_username = list_users()[0][0]
last_seen = query_user_last_seen(existing_username)
print("Пользователь", existing_username, "последний раз заходил", last_seen)
print("Пользователь shrimp", existing_username, "последний раз заходил",
query_user_last_seen("shrimp"))
2)auth.py
import time
def get_email(attempts=5, sleep_dur=15):
email = input("Ваш email: ")
tries = 1
while (email.find("@") == -1):
print("НЕ ТА ПОЧТА!!11!")
tries += 1
email = input("Попытка " + str(tries) + " Попробуйте еще раз: ")
if tries % attempts == 0:
print("Все блядь, приехали, попыток нет. Жди " + str(sleep_dur) + " секунд")
time.sleep(sleep_dur)
return email
def make_username(email):
return email.split("@")[0].lower()
3) db.py
import sqlite3
import random
from datetime import datetime as dt
class UsersDB:
__instance = None
@staticmethod
def get_instance():
if UsersDB.__instance is None:
UsersDB()
return UsersDB.__instance
def __init__(self):
if UsersDB.__instance is not None:
raise Exception("You're doing it wrong, don't do it")
else:
self.con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES)
self.init_db()
UsersDB.__instance = self
def init_db(self):
with self.con:
cur = self.con.cursor()
cur.execute(
"CREATE TABLE Users(Id INTEGER PRIMARY_KEY, username TEXT, last_seen timestamp)"
)
n = dt.now()
for i, (u, t) in enumerate(
[
("sergei", n.replace(month=8, day=3)),
("valentin87", n.replace(month=8, day=4)),
("igor99", n.replace(month=7, day=1)),
("anton4", n.replace(month=1, day=10)),
("vera2000", n.replace(month=4, day=14)),
("sunnyside", n.replace(month=2, day=24)),
("sarah.connor", n.replace(month=1, day=2)),
("andrey3", n.replace(month=4, day=21)),
("alexei22", n.replace(month=2, day=17)),
],
start=100,
):
h = random.randrange(0, 24)
m = random.randrange(0, 60)
s = random.randrange(0, 60)
us = random.randrange(0, 1000000)
t = t.replace(hour=h, minute=m, second=s, microsecond=us)
cur.execute("INSERT INTO Users values(?, ?, ?)", (i, u, t))
def list_users():
users = UsersDB.get_instance()
known_users = []
with users.con:
cur = users.con.cursor()
cur.execute("SELECT username, last_seen FROM Users")
known_users = cur.fetchall()
return known_users #[(u, t) for _, u, t in known_users]
def query_user_last_seen(username):
users = UsersDB.get_instance()
with users.con:
cur = users.con.cursor()
cur.execute("SELECT last_seen FROM Users where username=?", (username,))
results = cur.fetchone()
return results[0] if (results and len(results) > 0) else dt.now()
Последний код писал не я, но по этой базе нужно проверить тот юзернейм, который мы вписываем.
У вас есть хотя-бы идеи, догадки, потому что мои догадки в итоге неправильные, либо правильные, но я не правильно их воплощаю в жизнь