Gestore di Task con Python e MongoDB
Codegrind Team•Jul 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
- Librerie Python: Utilizzare
pymongo
per interagire con MongoDB. - 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).
- Utenti:
- Creare e gestire utenti.
- Ogni utente può avere uno o più task.
- Ricerca e Filtraggio:
- Permettere la ricerca dei task per titolo o descrizione.
- Filtrare i task per stato o data di scadenza.
- Autenticazione:
- Gestire l’accesso degli utenti con username e password.
Struttura del Progetto
- Database:
- Creare le collezioni
users
etasks
in MongoDB.
- Creare le collezioni
- Funzionalità CRUD:
- Implementare le operazioni CRUD per i task e gli utenti.
- Autenticazione:
- Implementare la registrazione e il login degli utenti.
- Ricerca e Filtraggio:
- Implementare la ricerca e il filtraggio dei task.
Passaggi
-
Installazione delle Librerie:
pip install pymongo bcrypt
-
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
-
Installazione delle librerie necessarie:
pip install pymongo bcrypt
-
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.
-
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.
- Salva il codice in un file Python, ad esempio
-
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
- Interfaccia Grafica: Utilizzare una libreria come
tkinter
oPyQt
per creare un’interfaccia grafica per il gestore di task. - Notifiche: Aggiungere funzionalità per inviare notifiche all’utente quando un task è in scadenza.
- Condivisione dei Task: Permettere agli utenti di condividere task con altri utenti.