-
Zainstaluj virtualenv, utwórz virtualenva, aktywuj virtualenva, przejdź do katalogu, gdzie chcesz mieć projekt
-
git clone [email protected]:v0y/sport-tracker-with-acziwments.git
-
Przejdź do folderu zassanego projektu:
cd sport-tracker-with-acziwments
-
Zainstaluj fabrica:
pip install fabric
-
Zainstaluj Node.js:
curl http://nodejs.org/dist/node-latest.tar.gz | tar xvz cd node-v* ./configure --prefix=$VIRTUAL_ENV make install
-
Zainstaluj npm:
curl -L https://npmjs.org/install.sh | sh
-
Zainstaluj Bowera, uglify-js i uglifycss:
sudo npm install bower uglify-js uglifycss
-
Zainstaluj zależności:
fab install_requirements
-
Utwórz usera MySQL i bazę danych:
fab create_database_role fab create_database
-
Odpal serwer:
./manage.py runserver
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
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 jakoform
, formularz musi mieć wMeta
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()
Aby wysłać maila wystarczy, że wywołasz funkcję simple_send_email()
.
-
I_dont_want_None()
- jeśli w templatce wyświetlasz jakąś zmienną, która może okazać sięNone
, przefiltruj ją tym filtrem. ZamiastNona
dostaniesz pusty string. -
is_active_tab()
- filtrujesz nimrequest
, jako parametr podajesz nazwę lub poszątkowy fragment urla (pamiętaj o początkowym slaszu!), on w całej swojej wdzięczności zwraca stringactive
, jeśli właśnie znajdujemy się pod podanym urlem.
CreatedAtMixin
- Czas utworzenia, czyliDateTimeField
zauto_now_add=True
NameMixin
- Nazwa. Posiada metodę__unicode__
zwracającą nazwę jako unicode.RelatedDateMixin
- Czyli zwykłyDateTimeField
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 polaname
.
Schemat kolorów do użycia w kolorowych miejscach typu wykresy został zaczerpnięty z colourlovers.com
#113f8c | #01a4a4 | #00a1cb |
#61ae24 | #d0d102 | #32742c |
#d70060 | #e54028 | #f18d05 |
#616161 |
#113f8c, #01a4a4, #00a1cb, #61ae24, #d0d102, #32742c, #d70060, #e54028, #f18d05, #616161,
Nie używaj bootstrapowych Glyphicons, zamiast tegu użyj Font Awesome 4.
Aby sprawdzić dostępne polecenia fabrica odpal fab --list
z głównego katalogu
projektu
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 %}
Zewnętrzne CSS-y powinny:
- być wrzucane do katalogu
app/shared/static/css
lubapp/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.
Zewnętrze biblioteki/skrypty js powinny:
- być wrzucane do katalogu
app/shared/static/js
lubapp/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:Jeśli parametruglifyjs script.js -o script.min.js -c --preamble
--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.
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 %}
Ś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