🚀 Nuova versione beta disponibile! Feedback o problemi? Contattaci

Gestore di Task con Python e MongoDB

Codegrind TeamJul 10 2024

Descrizione del Progetto

In questo progetto, creerai un gestore di task utilizzando Python e MongoDB. L’applicazione permetterà agli utenti di creare, leggere, aggiornare ed eliminare task. Inoltre, includerà funzionalità avanzate come la ricerca e il filtraggio dei task, e la gestione degli utenti.

Requisiti

  1. Librerie Python: Utilizzare pymongo per interagire con MongoDB.
  2. Task:
    • Creare, leggere, aggiornare ed eliminare task.
    • Ogni task deve avere un titolo, una descrizione, una data di scadenza e uno stato (completato/non completato).
  3. Utenti:
    • Creare e gestire utenti.
    • Ogni utente può avere uno o più task.
  4. Ricerca e Filtraggio:
    • Permettere la ricerca dei task per titolo o descrizione.
    • Filtrare i task per stato o data di scadenza.
  5. Autenticazione:
    • Gestire l’accesso degli utenti con username e password.

Struttura del Progetto

  1. Database:
    • Creare le collezioni users e tasks in MongoDB.
  2. Funzionalità CRUD:
    • Implementare le operazioni CRUD per i task e gli utenti.
  3. Autenticazione:
    • Implementare la registrazione e il login degli utenti.
  4. Ricerca e Filtraggio:
    • Implementare la ricerca e il filtraggio dei task.

Passaggi

  1. Installazione delle Librerie:

    pip install pymongo bcrypt
    
  2. Creazione del Programma:

    • Definire la struttura del database e le collezioni.
    • Implementare le funzionalità CRUD per i task e gli utenti.
    • Implementare la ricerca e il filtraggio dei task.
    • Gestire l’autenticazione degli utenti.

Esempio di Codice

from pymongo import MongoClient
from bson.objectid import ObjectId
import bcrypt

# Connessione al database
client = MongoClient('mongodb://localhost:27017/')
db = client['task_manager']

# Collezioni
users_collection = db['users']
tasks_collection = db['tasks']

# Funzioni per la gestione degli utenti
def create_user(username, password):
    hashed = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
    user = {"username": username, "password": hashed}
    users_collection.insert_one(user)
    print("Utente creato:", username)

def authenticate_user(username, password):
    user = users_collection.find_one({"username": username})
    if user and bcrypt.checkpw(password.encode('utf-8'), user['password']):
        print("Autenticazione riuscita")
        return True
    else:
        print("Autenticazione fallita")
        return False

# Funzioni per la gestione dei task
def create_task(user_id, title, description, due_date):
    task = {
        "user_id": user_id,
        "title": title,
        "description": description,
        "due_date": due_date,
        "completed": False
    }
    tasks_collection.insert_one(task)
    print("Task creato:", title)

def get_tasks(user_id):
    tasks = tasks_collection.find({"user_id": user_id})
    for task in tasks:
        print(task)

def update_task(task_id, updates):
    tasks_collection.update_one({"_id": ObjectId(task_id)}, {"$set": updates})
    print("Task aggiornato")

def delete_task(task_id):
    tasks_collection.delete_one({"_id": ObjectId(task_id)})
    print("Task eliminato")

# Funzioni di ricerca e filtraggio
def search_tasks(user_id, query):
    tasks = tasks_collection.find({"user_id": user_id, "$text": {"$search": query}})
    for task in tasks:
        print(task)

def filter_tasks(user_id, filter):
    tasks = tasks_collection.find({"user_id": user_id, **filter})
    for task in tasks:
        print(task)

# Esempio di utilizzo
def main():
    # Registrazione e autenticazione dell'utente
    username = input("Inserisci username: ")
    password = input("Inserisci password: ")
    create_user(username, password)
    if authenticate_user(username, password):
        user = users_collection.find_one({"username": username})
        user_id = user['_id']

        # Creazione di un task
        create_task(user_id, "Task 1", "Descrizione del Task 1", "2024-07-15")

        # Lettura dei task
        print("I tuoi task:")
        get_tasks(user_id)

        # Aggiornamento di un task
        task_id = input("Inserisci l'ID del task da aggiornare: ")
        updates = {"completed": True}
        update_task(task_id, updates)

        # Eliminazione di un task
        task_id = input("Inserisci l'ID del task da eliminare: ")
        delete_task(task_id)

        # Ricerca di task
        query = input("Inserisci la query di ricerca: ")
        search_tasks(user_id, query)

        # Filtraggio di task
        filter = {"completed": False}
        print("Task non completati:")
        filter_tasks(user_id, filter)

if __name__ == "__main__":
    main()

Istruzioni per l’Esecuzione

  1. Installazione delle librerie necessarie:

    pip install pymongo bcrypt
    
  2. Configurazione di MongoDB:

    • Assicurati di avere un’istanza di MongoDB in esecuzione sul tuo sistema.
    • Puoi scaricare e installare MongoDB dal sito ufficiale: MongoDB Download Center.
  3. Esecuzione del Programma:

    • Salva il codice in un file Python, ad esempio task_manager.py.
    • Esegui il programma:
      python task_manager.py
      
    • Segui le istruzioni per registrare e autenticare un utente, creare, leggere, aggiornare ed eliminare task, e utilizzare le funzionalità di ricerca e filtraggio.
  4. Testa il Programma:

    • Verifica che tutte le funzionalità funzionino correttamente.
    • Prova a creare, leggere, aggiornare ed eliminare task, e a utilizzare la ricerca e il filtraggio.

Estensioni Possibili

  1. Interfaccia Grafica: Utilizzare una libreria come tkinter o PyQt per creare un’interfaccia grafica per il gestore di task.
  2. Notifiche: Aggiungere funzionalità per inviare notifiche all’utente quando un task è in scadenza.
  3. Condivisione dei Task: Permettere agli utenti di condividere task con altri utenti.