GithubHelp home page GithubHelp logo

aplikacjawww's Introduction

Aplikacja WWW

Django-based application to manage registration of people for scientific summer school.

Build:

  • install virtualenv and pip
  • virtualenv venv - create a virtual python environment for the app
  • source venv/bin/activate - activate venv
  • ./migrate.sh - apply DB migrations
  • ./manage.py createsuperuser - script to create a superuser that can modify DB contents via admin panel

Run:

  • activate virtualenv (if not yet activated)
  • pip install -r requirements.txt
  • ./runserver.sh

Online version:

App currently available at http://warsztatywww.pl/ Also: http://aplikacjawww-jaszczur.rhcloud.com/

aplikacjawww's People

Contributors

marcinwrochna avatar micha7a avatar mrowqa avatar pawelzell avatar ramlak avatar sebastianjaszczur avatar sygi avatar zielmicha avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

aplikacjawww's Issues

Dodać tracking wizyt

Dodać tracking wizyt w Google Analytics (lub czymś innym). Przydatne do śledzenia z których kanałów przychodzą ludzie.

Django 1.8

Django 1.7 nie jest już od jakiegoś czasu wspierane (a Django 1.8 to LTS). Nie powinno raczej być żadnych problemów.

Ścieżka kwalifikacji uczestnika

Fajne by były wypisane kroki milowe w rekrutacji/zgłaszaniu warsztatów z deadlineami i jakimś helpem do każdego kroku. Można to dodać jako kolejną zakładkę profilu. Taki pociągnięty pomysł z tą "odhaczaną" listą w starej aplikacji.

Wydzielić edycję WWW jako model

Aktualnie informacja o roku pojedynczego warsztatu jest zdublowana znajdując się w WorkshopCategory oraz WorkshopType. Ponadto informacja o uczestnikach z danego roku znajduje się w WorkshopUserProfile. Warto by było zebrać tę informację do jednego modelu Edition, do którego linkowałyby by modele WorkshopUserProfile oraz Workshop. Dodatkowo trzeba napisać migrację, która zachowa spójność danych.

robots.txt

Trzeba dodać robots.txt, choćby puste, bo googlebot narzeka i obniża rating.

rich text editor

Do m.in. pola opisu warsztatów.
Może być Markdown z previewem jak na githubie, ale chyba lepiej WYSIWYG np. TinyMCE.

Prędzej czy później będziemy chcieli w tych polach mieć latexa, więc warto spojrzeć czy jakaś opcja nie ma tego wbudowanego (przez MathJax, ew. przez wywoływanie latexa+imagemagick na serwerze). Ewentualnie bajer: załączniki.

Przebudowa profilu i obowiązek wypełnienia

Proponowałbym obowiązkowe wypełnienie danych w profilu dla zakwalifikowanych prowadzących i uczestników. Te dane mogą okazać się potem przydatne (szkoła do identyfikatorów np).

Po za tym opcja zaznaczenia "jestem wegetarianinem", specjalne wymogi żywieniowe i inne standardowe obozowe rubryczki.

Przy czym proponuję by nie było obowiązku wypełniania tego (szczególnie tych obozowych) do czasu kwalifikacji uczestników by nie odstraszyło to nowych ludzi natłokiem pracy potrzebnej do poruszania się po stronie.

zmniejszyć stopień przezroczystości w podmenu

Podmenu, które pojawia się po kliknięciu w warsztaty albo artykuły jest półprzezroczyste i to średnio u mnie wygląda, bo przejście z ciemnego tła menu na białe tło strony przecina napis na górze.

Niestety nie wrzucę screena, bo z jakiegoś powodu print-screen przestał działać :P

Proste testy

Nie ma żadnych teraz. Na początek generalny test "odpalić serwer, wejść na stronę główną, sprawdzić czy nie zwraca błędu" będzie lepszy niż brak. (po zamknięciu tego zacznie się robić unittesty)

Lepsze menu

Obecne menu jest ładne, ale mało użyteczne. (Tj sam, jako weteran, nie wiem czego się po tym spodziewać; "Organizatorzy" pod "Artykuły"?!) Polecam zrobić jakieś jedno-poziomowe, by od razu były widoczne linki do głównych treści i stron. (W tym do "starej strony" - zresztą, co też pokazywałoby relację pomiędzy oceną.)

Szablon edycji warsztatów

Polecam utworzyć szablon edycji warsztatów, inaczej każde będą pisana w innym stylu, co utrudni porówanie oraz zmniejszy estetykę.

Profile innych użytkowników

Fajnie by było jakby się dało oglądać profile innych ludzi.
Ponadto dla jakiś adminów żeby była dostępna lista ludzi z uprawnieniami itp.
I np hiperłącza na profilu do aktywności danego człowieka (zgłoszone warsztaty, gdzie chcą uczestniczyć itp)

Zwykła strona o warsztatach nie działa

Chodzi o stronę /workshop/url-warsztatów a nie o /workshop/priv/url-warsztatow .
Prawdopodobnie ma to związek z niedawnym dodawaniem roku do modelu warsztatów.

email backend: oauth

Aplikacja potrzebuje wysyłać maile.
Normalny sposób nie zadziała, bo nie za bardzo da się poprawnie skonfigurować domeny (rekordy MX) z openshiftem (którego ip jest zmienne). Zresztą i tak normalnym sposobem niemało maili trafia do spamu, szczególnie ponoć z serwerów Amazon EC2, na których openshift stoi.

Dlatego trzeba wysyłać maile inaczej. W starej aplikacji jest tak: właściciel [email protected] klika coś w aplikacji i uprawnia dzięki OAuth aplikację do wysyłania maili przez SMTP gmaila. Niestety nie widzę implementacji takiego EmailBackend w Django (no kurdeee).
W poprzedniej aplikacji implementacja jest tu:
https://code.google.com/p/www-app/source/browse/email.php

Trzeba gdzieś w bazie zapisać access token, więc dodałbym model Settings z polami key: napis, value: napis, tak jak w starej aplikacji. Potem można tego używać do innych ustawień, których nie chcemy hardkodować (typu deadliny).

Także o ile nie ma lepszych pomysłów lub chętnych do implementacji to zająłbym się tym teraz.

Nie ma użytkowników ze statusem "odrzucony"

Trzeba to zbadać, być może zobaczyć stare backupy. Ewentualnie zgadnąć którzy użytkownicy z 2015 powinni mieć status odrzucony - to chyba jest każdy user, który zapisał się na jakieś warsztaty w 2015 i nie ma statusu "zaakceptowany".

Powodem błędu mogła być zła migracja lub to, że użytkownicy takiego statusu, być może, nigdy nie mieli.

Dodać logowanie jako użytkownik

Przydałoby się prawo dla superadmina / admina, żeby zalogować się jako użytkownik (np. w celu debugowania). Nie zastanawiałem się jak.

Lista warsztatów

Potrzebna jest lista warsztatów dla organizatorów, żeby oceniać i potem kwalifikować warsztaty.

Wygląd strony

Wygląd profilu na razie jest dosyć biedny. Trzeba by tam ogarnąć cssa.

Lista deadline'ów

Przydałoby się zrobić listę deadline'ów. Myślę także, że deadline'y powinny być wpisane w bazie danych, żeby można było je łatwo zmieniać i odwoływać się do nich.

Whitelista tagów do edytora

Jeśli chcemy dać CKEditor do edycji "osobom niezaufanym" - np. (potencjalnym) prowadzącym warsztatów - to nie można przepuszczać dowolnego skryptu. Czyli trzeba mieć white-listę tagów i robić walidację.

Komentarze przy ocenie

Czasem prócz oceny za zadanie przydaje się komentarz (np. "Wyjątkowo niechlujnie" lub "Zrobił zadanie 3 genialnie"). Było w poprzedniej aplikacji WWW. Czy jest możliwość dodania takiego feature?

Zmniejszanie downtime

Trzeba zmniejszyć czas downtime'u aplikacji. Konkretnie - wprowadzić hot deploy'e, a także backupy nie wyłączające aplikacji. Jako że na ten moment tylko ja mam openshifta - to oczywiście się tym zajmuję.

Build problem

Odpalenie

migrate.sh
Bez istniejącej bazy danych skutkowało tym, ze django wyrzucał błąd postaci
(Wstaw kilkanaście linijek tracebacku)
django.db.utils.OperationalError: no such table: wwwapp_article
Wynikało to z tego, że django zamiast najpierw stworzyć bazę danych, ?interpretował wszystko?
Rozwiązaniem było usunięcie większości kodu i pozostawienie niezbędnego minimum, odpalenie skryptu, wklejenie kodu i ponowne odpalenie skrytpu.
Dawało to wtedy ładną bazę SQLite.
Można ją dołączyć do kodu?
Bodajże Miśka wspominała o problemach z postawieniem serwera.

Squash migracji

Migracji jest już dużo i niektóre korzystają z modułów, których nie ma w requirements.txt .

test iśu

Przykładowe coś do zrobienia. Można to label'ować?

wyłączyć paginację listy warsztatów

Obecnie strona z listą warsztatów zachowuje się tak:

  • jak jest za dużo warsztatów, żeby je wyświetlić na jednej stronie, to wyświetla się na dole przełącznik: 1,2,3,4
  • jak się kliknie na numerki, to się od razu zmieniają i wszystko jest fajnie
    ALE:
    jeśli przejdę na stronę 2, a potem kliknę na warsztaty, a potem zrobię <- w przeglądarce, to wracam na stronę 1, bo fakt bycia na stronie 2 nie jest nigdzie trzymany. Jest to zdecydowanie niewygodne.

Możliwe rozwiązania (zakładające, tak jak teraz, że strony 1,2,3,4 będą się szybko ładować):

  • trzymanie numeru strony i ilości wierszy w ciasteczkach
  • podzielenie listy na kilka stron (tzn. workshops/, workshops/2/, workshops/3/, etc) i ich cache'owanie. Na pewno to drugie da się zrobić za pomocą linijki w django, a podejrzewam, że pierwsze też.

Wersjonowanie warsztatów

Będziemy potrzebowali dodać pole do bazy/utworzyć archiwum na stare warsztaty. Są potrzebne do robienia archiwalnych programów.

Profil się nie tworzy dobrze

Wydaje mi się, że podczas tworzenia profilu przy pomocy FB nie tworzy się odpowiedni model UserInfo. Trzeba to załatać i zobaczyć ilu ludzi to dotyczy - pojedynczym użytkownikom można ten obiekt dodać ręcznie.

Przyjęte warsztaty - zmiany

Warsztaty powinny mieć możliwość bycia przyjętymi (oznaczane przez organizatorów). I powinna być ogólnodostępna lista tychże przyjętych warsztatów.
Przy okazji - można by albo dodać oddzielne pola na "przedstawienie zgłoszenia warsztatów" i "stronę warsztatów". Albo opcję czy opis ma być publiczny.

Funkcjonalność i wygląd listy warsztatów

Mamy dwa rodzaje listy warsztatów: lista wszystkich i lista konkretnego użytkownika (do jego wglądu).
Trzeba przemyśleć co powinny zawierać, w jakim celu istnieć i jak wyglądać. No i - zrobić.

formularz proponowania warsztatów

  • widok Twoje Warsztaty na listę z przejściem do dodania i edycji istniejących
  • model Warsztatów (tytuł, prowadzący, opis, rodzaj=blok/luźny, czas trwania [x1,5h], dział=podzbiór {mat,fiz,...})
  • formularz Dodaj/Edytuj Warsztaty

(Ewentualne bajery: możliwość dodawania współprowadzących.)

Zmiana e-maili powinna wymagać potwierdzenia

W tym momencie można e-maila sobie zmienić na koncie na dowolny, np. nieprawdziwy e-mail. Tak być nie powinno - po próbie zmiany e-maila powinien się wysyłać e-mail na ten adres z zapytaniem, czy rzeczywiście ten adres należy do tej osoby.

Przypuszczam, że jakaś biblioteka zintegrowana z Django już to robi - pewnie wystarczy znaleźć i dołączyć.

Odnośniki do archiwum

Niedługo zaczną wchodzić ludzie (nie tylko prowadzący) i mogą być zainteresowani czym jest w ogóle WWW.

Na stronie głównej jest kilka linków, ale może warto by dodać w menu coś w stylu "Archiwum" które wywala Cię na wikidota jeszcze?

automatyczne slugi

Fajnie by było automatycznie generować slugi (nazwy warsztatów w URLach).
Chyba najprościej ukryć pole przy robieniu nowych warsztatów i wypełnić je automatycznie (może być po stronie serwera), a potem przy edycji je wyświetlać normalnie (i niech użytkownik decyduje co z nim robić, jeśli zmieni tytuł). Tylko trzeba dobrze obsłużyć sytuację kiedy slug okaże się nie unikatowy.

To samo dla artykułów, ale to trzeciorzędne.

Upload obrazków

Na razie nie istnieje opcja upload'u obrazków na serwer - można co prawda w edytorze załączać obrazki z innych stron - ale fajnie by było to zmienić.
Przyda się do artykułów, propozycji warsztatów - a potem np. do zdjęć profilowych.

Trzeba też pamiętać o jakiś ograniczeniach na ilość MB/plików na użytkownika.

rejestracja bez fb

Możliwość rejestracji użytkownika bez posiadania konta na fb.
Opcja minimum: z kontem Google.
Generalnie opcja zwykłej rejestracji powinna być.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.