-
Notifications
You must be signed in to change notification settings - Fork 10
Opis aplikacji
Porządny projekt w Django powinien być złożony z wielu luźno połączonych aplikacji. Każda z tych aplikacji definiuje swoje własne modele, ścieżki oraz widoki. Aplikacje nie są całkowicie niezależne, a zależności między nimi odpowiadają z grubsza kluczom obcym w modelach.
Aplikacja zarządza podstawowymi typami użytkowników: Są tu zdefiniowani pracownicy i studenci (a także programy studiów oraz... zgoda na pokazywanie nazwiska). Sam model użytkownika — razem z weryfikacją haseł, logowaniem i pamiętaniem sesji — jest wbudowany w Django (django.contrib.auth
), ale nasza aplikacja users
rozszerza go.
- Lista studentów/pracowników.
- Moje konto.
- Różne formularze (zmiana hasła, e-mail).
Miejsce, gdzie trzymamy rzeczy, które są naprawdę uniwersalne (np. edytor Markdown). Bardzo staramy się go nie zaśmiecić (więcej tutaj).
Tu są zdefiniowane wszystkie modele związane z zajęciami: Semestry, Instancje przedmiotów, Grupy zajęciowe, Efekty i Tagi, Sale i Terminy zajęć.
- Lista przedmiotów z wyborem semestru i filtrem.
- Strona przedmiotu.
- Strona grupy.
Tutaj żyje logika zapisywania się. W tej aplikacji jest zdefiniowany model Record
— czyli zapis łączący studenta z grupą. Aplikacja ta jest też odpowiedzialna za liczenie czasów otwarcia zapisów. Nie ma żadnych widoków generujących strony.
Aplikacja odpowiedzialna za wyświetlanie planu zajęć i prototypu. Zdefiniowane są w niej przypięcia. Gros aplikacji to JS z planem, prototypem i filtrami przedmiotów.
Tutaj jest zdefiniowana propozycja przedmiotu. Dość spory i skomplikowany jest formularz tworzenia nowej/edycji istniejącej propozycji, ponieważ propozycja musi zawierać dość szczegółowy syllabus. Każda instancja przedmiotu z aplikacji courses
musi odpowiadać jakiejś propozycji przedmiotu.
Głosowanie na zajęcia. Tutaj jest zdefiniowany Rok akademicki (to jest jedyne miejsce, gdzie podział na semestry nie jest wystarczający, gdyż ofertę dydaktyczną tworzy się na cały rok).
- Ekran powitalny (zasady).
- Formularz głosowania.
- Podsumowanie głosowania, pokaż mój głos.
Tutaj pracownicy zaznaczają, w jakich dniach i godzinach są gotowi prowadzić zajęcia.
Dyrektor ds. dydaktycznych wybiera przedmioty, do których potrzebuje kadry, pracownicy zaznaczają, zajęcia do jakich przedmiotów byliby gotowi prowadzić.
Dość skomplikowane narzędzie mające pomóc dyrektorowi ds. dydaktycznych w przydzielaniu zajęć na następny rok. Doświadczenie pokazuje, że do takiego zadania przydatna jest elastyczność arkusza kalkulacyjnego, dlatego ta aplikacja eksportuje pewne dane z Systemu Zapisów do arkuszy kalkulacyjnych, a następnie importuje podjęte w arkuszu decyzje. Aplikacja generuje plik z gotowymi przydziałami dla Schedulera oraz wyświetla je pracownikom.
Część „ankietowa” oceny zajęć. Ciekawa w tej aplikacji jest dowolność pytań, jakie można zadawać studentom: Pytania te definiuje się w formacie json
w modelu Schema
. Submission
wypełnia te pytania odpowiedziami.
- Ekran powitalny z opisem protokołu ślepych podpisów.
- Formularz wklejania kluczy.
- Formularz wypełniania ankiet — jest tu ciekawa logika związana z pamiętaniem w sesji przeglądarki kluczy, żeby móc wyświetlać różne ankiety bez zbędnego Javascriptu.
Część kryptograficzna oceny zajęć. Tutaj jest zaimplementowany protokół ślepych podpisów zarówno od strony serwera, jak i ze strony klienta (dwukrotnie: raz w Pythonie i raz w JS-ie).
Aplikacja obsługująca aktualności na stronie. Trochę syfiasty kod, ale ma proste zadania.
Powiadomienia — zarówno te pod dzwoneczkiem, jak i wysyłane mailem. Powiadomienia każdego użytkownika są zapisane w bazie Redis. Maile są wysyłane asynchronicznie.
Wydarzenia, rezerwacje, ogólnie cała zakładka „Sale”. Jest tu za dużo modeli i widoków.
Aplikacja odpowiedzialna za importowanie planu zajęć z systemu, który go układa — Schedulera. Aplikacja ma dwa modele pamiętające, jak mapować zajęcia i prowadzących, których nie może rozpoznać automatycznie w Systemie Zapisów. Jej trzonem jest skrypt import_schedule
.
Widoki tylko-dla-adminów (głównie z myślą o dyr. ds. dydaktycznych). Pewne zagregowane dane o czasach otwarć, popularności zajęć. Pomagają reagować w gorącym czasie zapisów.
System do zarządzania pracami dyplomowymi. Pozwala pracownikom zgłaszać nowe prace dyplomowe. Specjalna komisja nad nimi głosuje (trzy głosy za=akceptacja). Do prac są przypisani studenci.