System głosowania online
Robert Glapiński | Vasyl Kin |
Warszawa 2024
- Wstęp
- Specyfikacja wymagań
- Diagramy
- Instalacja i uruchomienie projektu
- Jak nadać uprawnienia?
- Jak zgenerować raport? - Procedura generowania raportów
- Jak uruchomić symulację?
- Zrzuty ekranów
Rozpoczynamy od przedstawienia kontekstu, w którym projekt ma swoje miejsce. Obecnie, w erze cyfrowej, rozwój systemów online staje się coraz bardziej istotny. W tym kontekście pojawia się potrzeba stworzenia efektywnego systemu głosowania online, który może znacząco ułatwić i usprawnić procesy decyzyjne.
Celem tej dokumentacji jest przedstawienie kompleksowego projektu systemu głosowania online, który spełni różnorodne potrzeby użytkowników. Kluczowe cele projektu:
-
Usprawnienie procesu decyzyjnego: Stworzenie systemu, który umożliwi szybkie i bezpieczne głosowanie online.
-
Zarządzanie uprawnieniami: Zaimplementowanie hierarchii uprawnień, aby skutecznie kontrolować dostęp do funkcji systemu i zapewnić bezpieczeństwo operacji.
-
Obsługa różnych typów głosowań: Stworzenie elastycznego systemu, który umożliwi przeprowadzenie zarówno prostych głosowań zwykłych, jak i bardziej złożonych głosowań na opcje, uwzględniając różne scenariusze decyzyjne.
-
Odporność na błędy: Zaprojektowanie systemu w taki sposób, aby był odporny na błędy, a także aby umożliwiał łatwe odnajdywanie i naprawianie ewentualnych usterek.
-
Generowanie raportów: Umożliwienie sekretarzowi efektywnego zarządzania poprzez generowanie czytelnych raportów, które zawierają istotne informacje o przeprowadzonych głosowaniach.
Szczególny nacisk w tej pracę kładziemy na osiągnięcie wyżej wymienionych celów w celu stworzenia nowoczesnego i efektywnego systemu głosowania online.
System musi wspierać system kworum. Przy tworzeniu głosowania powinien być wybór kworum. Aby głosowanie było ważne, liczba głosujących musi być większa od kworum.
Głosowanie zwykłe powinno umożliwiać wybór spośród trzech opcji: "tak", "nie" oraz "wstrzymuję się". Aby głosowanie było ważne, konieczne jest spełnienie warunków:
-
Większość bezwzględna: Liczba głosujących "ZA" musi być większa niż suma głosujących "PRZECIW" i "WSTRZYMUJĘ SIĘ".
-
Większość względna: Liczba głosujących "ZA" musi być większa niż liczba głosujących "PRZECIW".
Głosowanie na opcje powinno umożliwiać wybór spośród maksymalnie pięciu opcji, a także dodatkowej opcji "wstrzymuję się". Ten rodzaj głosowania może być wykorzystywany na przykład do wyboru kandydata na dyrektora spośród 5 zgłoszonych.
Administrator powinien mieć pełne uprawnienia do systemu, umożliwiając mu zarządzanie użytkownikami, tworzenie, uruchamianie i zatrzymywanie głosowań, a także generowanie raportów
Sekretarz powinien mieć możliwość tworzenia obu rodzajów głosowań, definiowania kworum oraz zarządzania otwieraniem i zamykaniem głosowań. Nie powinien mieć dostępu do funkcji administracyjnych związanych z zarządzaniem użytkownikami.
Użytkownik może głosować tylko wtedy, gdy głosowanie jest otwarte. Ma również możliwość zmiany swojego głosu w czasie trwania otwartego głosowania.
System powinien posiadać funkcjonalność generowania raportów, dostępną dla roli sekretarza oraz administratora. Generowane raporty powinny być w formacie PDF i obejmować dwie główne kategorie: ogólny za dany okres oraz szczegółowy.
Sekretarz powinien mieć możliwość wygenerowania ogólnego raportu za określony okres czasu. Raport ten powinien zawierać:
-
Zestawienie wszystkich przeprowadzonych głosowań w podanym okresie.
-
Liczbę głosujących w każdym z głosowań.
-
Datę przeprowadzenia każdego z głosowań.
-
Wynik każdego z głosowań.
Dodatkowo, sekretarz powinien mieć możliwość generowania szczegółowego raportu dotyczącego pojedynczego głosowania. Ten raport powinien zawierać pełne dane związane z danym głosowaniem, obejmujące:
-
Szczegóły dotyczące typu głosowania (czy to głosowanie zwykłe czy na opcje).
-
Listę opcji w przypadku głosowania na opcje.
-
Liczbę głosujących i ich głosy.
-
Datę przeprowadzenia głosowania.
-
Wyniki głosowania.
System powinien także umożliwiać stworzenie zabezpieczonego hasłem pliku archiwum zawierającego dane z bazy (np. w formie archiwum tar.gz lub zip). Plik ten będzie dostępny dla sekretarza i administratora, który poda hasło podczas procesu generowania.
W tym diagramie nie wykorzystano standardowych modeli, które tworzy Django(oprócz modeli Group).
Aby zainstalować Pythona, należy odwiedzić oficjalną stronę Pythona pod adresem i pobrać najnowszą wersję. Po pobraniu pliku instalacyjnego, uruchom go i postępuj zgodnie z instrukcjami na ekranie, aby zainstalować Pythona.
Aby zainstalować projekt Django, najpierw musisz go pobrać. Możesz to zrobić, odwiedzając stronę projektu na GitHubie pod adresem i klikając przycisk "Code" możesz pobrać archiwum z kodem, lub skopiować link do repozytorium i użyć go w terminalu z komendą git clone.
git clone https://github.com/h1r0kuu/Voting-System
Po zainstalowaniu projektu, musisz zainstalować wszystkie zależności wymagane przez projekt. Zależności te są zazwyczaj wymienione w pliku requirements.txt w głównym katalogu projektu. Aby zainstalować zależności, otwórz terminal, przejdź do katalogu projektu i wpisz komendę:
pip install -r requirements.txt
Django używa systemu migracji do śledzenia zmian w modelach i do tworzenia odpowiednich tabel w bazie danych. Komenda makemigrations tworzy nowe migracje na podstawie zmian, które wprowadziłeś w modelach.
python manage.py makemigrations
Komenda migrate stosuje (lub odwraca) migracje, które zostały utworzone. To oznacza, że wprowadza zmiany w bazie danych zgodnie z instrukcjami zawartymi w migracjach.
python manage.py migrate
Django umożliwia tworzenie super użytkownika (administratora), który ma pełny dostęp do strony administracyjnej projektu. Aby utworzyć super użytkownika, otwórz terminal, przejdź do katalogu projektu i wpisz komendę:
python manage.py createsuperuser
Następnie postępuj zgodnie z instrukcjami na ekranie, aby ustawić nazwę użytkownika, adres e-mail(nieobowiązkowo) i hasło dla super użytkownika. Aby uzyskać dostęp do panelu administracyjnego, przejdź na stronę .
Wreszcie, po zastosowaniu wszystkich migracji, powinieneś być w stanie uruchomić serwer projektu.
python manage.py runserver
W celu nadania uprawnień, należy postępować zgodnie z poniższymi krokami:
-
Przejdź do sekcji "Użytkownicy".
-
Znajdź i wybierz użytkownika, któremu chcesz nadać uprawnienia.
-
W sekcji "Grupy" wybierz odpowiednie uprawnienia dla danego użytkownika.
-
Zapisz zmiany.
Pamiętaj, że uprawnienia mogą obejmować takie działania jak zarządzanie głosowaniami lub użytkownikami. Staraj się nadawać uprawnienia zgodnie z potrzebami i odpowiedzialnościami poszczególnych użytkowników.
Sekretarz może generować raporty poprzez wykonanie następujących kroków w panelu administracyjnym:
-
Przejście do sekcji "Głosowania".
-
Z listy dostępnych głosowań, wybierz jedno lub kilka głosowań.
-
Wybieranie opcji "Wygeneruj raport".
-
Naciśnięcie przycisku "Wykonaj".
-
Pobieranie wygenerowanego pliku PDF-raportu.
W przypadku generowania raportów dla wielu głosowań jednocześnie, system umożliwia pobranie archiwum z zestawem plików PDF dla każdego z wybranych raportów.
Aby uruchomić symulację, można użyć następującego polecenia w terminalu:
python manage.py simulate
Przykład tego, jak powinno to wyglądać w terminalu: Opis tego, co dzieje się po wywołaniu tego polecenia:
-
Usuwanie starych danych: Polecenie rozpoczyna się od usunięcia wszystkich starych danych z modeli
Vote
,User
,Voting
iVotingOption
. Nie usuwa jednak użytkowników, którzy są superużytkownikami. -
Tworzenie nowych danych: Następnie polecenie tworzy nowe dane dla modeli. Rozpoczyna się od utworzenia grup użytkowników o nazwach "admin", "sekretarz" i "użytkownik".
-
Tworzenie nowych użytkowników: Tworzy określoną liczbę użytkowników (
100
) i losowo przypisuje ich do jednej z grup. -
Tworzenie nowych głosowań: Tworzy określoną liczbę głosowań (
50
). Jeśli typ głosowania to "O", tworzy również opcje głosowania dla każdego głosowania. -
Tworzenie głosów użytkownika: Dla każdego głosowania losowo decyduje, czy każdy użytkownik zagłosuje, czy nie. Jeśli użytkownik zagłosuje, losowo wybierana jest opcja, na którą użytkownik zagłosuje.