Opis aplikacji - iiuni/projektzapisy GitHub Wiki
Aplikacje w Systemie Zapisów
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.
zapisy/apps/users
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.
Widoki
- Lista studentów/pracowników.
- Moje konto.
- Różne formularze (zmiana hasła, e-mail).
zapisy/apps/common
Miejsce, gdzie trzymamy rzeczy, które są naprawdę uniwersalne (np. edytor Markdown). Bardzo staramy się go nie zaśmiecić (więcej tutaj).
zapisy/apps/enrollment/courses
Tu są zdefiniowane wszystkie modele związane z zajęciami: Semestry, Instancje przedmiotów, Grupy zajęciowe, Efekty i Tagi, Sale i Terminy zajęć.
Widoki
- Lista przedmiotów z wyborem semestru i filtrem.
- Strona przedmiotu.
- Strona grupy.
zapisy/apps/enrollment/records
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.
zapisy/apps/enrollment/timetable
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.
zapisy/apps/offer/proposal
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.
zapisy/apps/offer/vote
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).
Widoki
- Ekran powitalny (zasady).
- Formularz głosowania.
- Podsumowanie głosowania, pokaż mój głos.
zapisy/apps/offer/desiderata
Tutaj pracownicy zaznaczają, w jakich dniach i godzinach są gotowi prowadzić zajęcia.
zapisy/apps/offer/preferences
Dyrektor ds. dydaktycznych wybiera przedmioty, do których potrzebuje kadry, pracownicy zaznaczają, zajęcia do jakich przedmiotów byliby gotowi prowadzić.
zapisy/apps/offer/assignments
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.
zapisy/apps/grade/polls
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.
Widoki
- 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.
zapisy/apps/grade/ticket_create
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).
zapisy/apps/news
Aplikacja obsługująca aktualności na stronie. Trochę syfiasty kod, ale ma proste zadania.
zapisy/apps/notifications
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.
zapisy/apps/schedule
Wydarzenia, rezerwacje, ogólnie cała zakładka „Sale”. Jest tu za dużo modeli i widoków.
zapisy/apps/schedulersync
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
.
zapisy/apps/statistics
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.
zapisy/apps/theses
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.