Skip to content

v0y/sport-tracker-with-acziwments

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

travis Code Health

Sports tracker with achievements

Zaczynamy zabawę!

  1. Zainstaluj virtualenv, utwórz virtualenva, aktywuj virtualenva, przejdź do katalogu, gdzie chcesz mieć projekt

  2. git clone [email protected]:v0y/sport-tracker-with-acziwments.git

  3. Przejdź do folderu zassanego projektu:

    cd sport-tracker-with-acziwments
  4. Zainstaluj fabrica:

    pip install fabric
  5. Zainstaluj Node.js:

    curl http://nodejs.org/dist/node-latest.tar.gz | tar xvz
    cd node-v*
    ./configure --prefix=$VIRTUAL_ENV
    make install
  6. Zainstaluj npm:

    curl -L https://npmjs.org/install.sh | sh
  7. Zainstaluj Bowera, uglify-js i uglifycss:

    sudo npm install bower uglify-js uglifycss
  8. Zainstaluj zależności:

    fab install_requirements
  9. Utwórz usera MySQL i bazę danych:

    fab create_database_role
    fab create_database
  10. Odpal serwer:

    ./manage.py runserver
    

Kilka informacji o projekcie - kod

Paginacja

Zamiast za każdym razem robić copypastę z dokumentacji Django z tymi wszyskimi try...except, wygeneruj stronę paginatora korzystając z funkcji get_page() z app.shared.helpers

Aby wsadzić nawigację paginacji do templatki skorzystaj ze snippeta:

{% include "snippets/pagination.html" %}

Uwaga! Strona paginacji musi zostać przekazana do templatki jako page

Formularze

Snippety formularzy znajdują się w folderze snippets, więc inkludujemy je w sposób:

{% include "snippets/[nazwa snippeta]" %}
  • form_vertical.html - snippet całego formularza, łącznie z html-ową otoczką w postaci tagów <form> i podobnych. Pola ustawione jedno pod drugim. Obiekt formularza musi być przekazany jako form, formularz musi mieć w Meta podany tytuł (name) i treść tekstu buttona (button_text).

    Przykład:

    class Meta:
        name = u"Logowanie"
        button_text = u"Zaloguj się"
  • form_vertical_non_complex.html - snippet formularza bez całej html-owej otoczki, więc sam musisz zadbać o <form>, <fieldset>, <button> i inne gówna. Zawiera wszystkie pola ułożone jedno pod drugim, komunikaty błędów i takie tam.

Do tego możesz sobie zerknąć, jakie inne snippety siedzą w folderze shared/templates/snippets. Znajdziesz tam takie głupoty, jak snippet komunikatu błędu w formie, przycisku formularza czy inne.

Jeśli jakieś mniej typowe pole Twojego formularza zostanie wyświetlone jako zły typ, sprawdź, czy nie trzeba dopisać jego typu do tagu field_type()

Wysyłanie maili

Aby wysłać maila wystarczy, że wywołasz funkcję simple_send_email().

Filtry

  • I_dont_want_None() - jeśli w templatce wyświetlasz jakąś zmienną, która może okazać się None, przefiltruj ją tym filtrem. Zamiast Nona dostaniesz pusty string.

  • is_active_tab() - filtrujesz nim request, jako parametr podajesz nazwę lub poszątkowy fragment urla (pamiętaj o początkowym slaszu!), on w całej swojej wdzięczności zwraca string active, jeśli właśnie znajdujemy się pod podanym urlem.

Mixiny modeli

app.shared.models

  • CreatedAtMixin - Czas utworzenia, czyli DateTimeField z auto_now_add=True
  • NameMixin - Nazwa. Posiada metodę __unicode__ zwracającą nazwę jako unicode.
  • RelatedDateMixin - Czyli zwykły DateTimeField
  • SHA1TokenMixin - Token sha1, jeśli niepodany tworzy się z aktualnego przy zapisie czasu. Posiada metodę get_activation_link pobierającą link z danym tokenem.
  • SlugMixin - Slug. Jeśli niepodany, tworzy się z pola name.

Kilka informacji o projekcie - frontend

Kolory

Schemat kolorów do użycia w kolorowych miejscach typu wykresy został zaczerpnięty z colourlovers.com

kolory

#113f8c #01a4a4 #00a1cb
#61ae24 #d0d102 #32742c
#d70060 #e54028 #f18d05
#616161

#113f8c, #01a4a4, #00a1cb, #61ae24, #d0d102, #32742c, #d70060, #e54028, #f18d05, #616161,

Ikony

Nie używaj bootstrapowych Glyphicons, zamiast tegu użyj Font Awesome 4.

Narzędzia

Fabric

Aby sprawdzić dostępne polecenia fabrica odpal fab --list z głównego katalogu projektu

Less

W projekcie do pisania styli używany jest less.

Plików nie trzeba kompilować, wrzucamy je z użyciem django compressora, np:

{% load compress %}

{% compress css %}
    <link rel="stylesheet" media="screen" href="{% static 'css/style.less' %}" type="text/less">
{% endcompress %}

CSS

Zewnętrzne CSS-y powinny:

  • być wrzucane do katalogu app/shared/static/css lub app/shared/static/bootstrap/css (jeśli dotyczą bootstrapa, np. "bootarap-cośtam.min.css"), chyba, że są szczególne dla jakiejś aplikacji - wtedy do statyków tej apki
  • minimalizowane za pomocą uglifycss z parametrami --cute-comments, na przykład:
    uglifycss --cute-comments style.css > style.min.css
    
  • po skompresowaniu zapisane z rozszerzeniem *.min.css. Nieskompresowany plik nie powinien się znaleźć w repo.

JS

Zewnętrze biblioteki/skrypty js powinny:

  • być wrzucane do katalogu app/shared/static/js lub app/shared/static/bootstrap/js (jeśli dotyczą bootstrapa, np. "bootarap-cośtam.min.js"), chyba, że są szczególne dla jakiejś aplikacji - wtedy do statyków tej apki
  • minimalizowane za pomocą uglifyjs2 z parametrami -c --preamble, na przykład:
    uglifyjs script.js -o script.min.js -c --preamble
    
    Jeśli parametr --preamble uniemożliwi kompresję, należy skompresować plik bez niego, ale ręcznie przekleić nagłówek (ten komentarz z licencją, autorem, itp.) do pliku skompresowanego
  • po skompresowaniu zapisane z rozszerzeniem *.min.js. Nieskompresowany plik nie powinien się znaleźć w repo.

CoffeeScript

Plików nie trzeba kompilować, wrzucamy je z użyciem django compressora, np:

{% load compress %}

{% compress js %}
    <script src="{% static 'js/map_handler.coffee' %}" type="text/coffeescript"></script>
{% endcompress %}

Zasady

Urle

Ścieżki urli powinny wygladać mniej więcej tak:

/obiekt/add
/obiekt/edit
/obiekt/edit/identyfikator
/obiekt/show/identyfikator (jeśli tylko jeden typ widoku)
/obiekt/show/[list|chart|detail]/identyfikator

identyfikator - id lub slug

Gdy brak identyfikatora powinien zostać wyświetlony zasób dla zalogowanego usera