Dodanie unikalnej kolumny do istniejącej tabeli w Django

Czasami zachodzi potrzeba dodania nowej, unikalnej kolumny do istniejącego już modelu w Django. Niestety jeśli w tabelce istnieją już wpisy, otrzymamy błąd. W takim przypadku, dodanie nowej kolumny należy podzielić na 3 kroki. Stworzenie kolumny bez indeksu unikalnego, wygenerowanie unikalnych wartości, dodanie indeksu. Możemy to zrobić używając standardowego mechanizmu migracji, który znajduje się w Django. Zacznijmy od przykładowego kodu:

W przykładzie do modelu Event dodajemy kolumnę key która zawiera unikalny ciąg znaków. W pierwszym kroku tworzymy nową kolumnę. W kroku 2 przekazujemy do mechanizmu funkcje Pythona. Jako parametry otrzyma ona obiekty za pomocą których będzie mogła wykonywać operacje na bazie danych. W przykładowej funkcji wyciągamy wszystkie wiersze które znajdują się w bazie. Przechodzimy pojedynczo przez każdy element, generujemy losowy ciąg znaków i zapisujemy zmiany w bazie. Można przyjąć dowolną strategię generowania unikalnej wartości, dla liczb może to być po prostu kolejny numer. Gdy już mamy unikalne wartości w każdym wierszu tabelki, możemy na nią nałożyć indeks unikalny (krok 3).

Django – dodawanie obsługi nowych komend przez manage.py

Czasami potrzebujemy wykonać jakieś proste, powtarzalne czynności, które można łatwo zautomatyzować. Django posiada mechanizm, który umożliwia dodawanie nowych komend uruchamianych przez manage.py. Wywołanie komendy będzie miało postać:

Dodatkowo, możemy w ten sposób zaprogramować jakieś zadania uruchamiane cyklicznie poprzez crona. Dzięki temu nie musimy wywoływać adresu url tylko uruchamiamy polecenie z linii komend.
Continue reading Django – dodawanie obsługi nowych komend przez manage.py

Testy w Django z użyciem Selenium

Tworząc nawet najprostszą aplikację bardzo szybko dochodzimy do momentu w którym “przeklikanie” głównych ścieżek w aplikacji zaczyna być bardzo czasochłonne i nużące. Wprowadzenie nowych funkcji zaczyna być irytujące. Jest to szczególnie uciążliwe w interpretowanych językach, gdzie informację o ewentualnych błędach dostajemy dopiero po wejściu na stronę lub wykonaniu jakiejś akcji. Gdzieś nawet widziałem cytat:

Kto informuje o błędach? W Javie kompilator, w PHP klient

Kolejnym problemem jest gdy mamy do przejścia jakiś dłuższy scenariusz aby sprawdzić jakąś funkcjonalność. Po kilku przejściach i rosnącym zdenerwowaniu, gdy funkcjonalność wciąż nie chce działać sprawia, że pomijamy część elementów które mogą mieć wpływ na działanie (lub nie działanie). Takie scenariusze możemy mnożyć dowolnie. Dlatego warto zastanowić się nad zautomatyzowaniem takich powtarzalnych czynności. Do tego świetnie nadaje się biblioteka Selenium, która bardzo ułatwia testowanie z użyciem prawdziwej przeglądarki.
Continue reading Testy w Django z użyciem Selenium

Django + pyenv-vierualenv + mod_wsgi

Ostatnio potrzebowałem skonfigurować Django z Pythonem w wersji innej niż tą którą posiadam w systemie. Natknąłem się na pyenv który pozwala na posiadanie kilku wersji Pythona w systemie i uruchamianie programów z którą wersją chcemy. Sama instalacja pyenv i dodanie kolejnych wersji nie nastręcza problemów jednak pojawiają się one przy konfiguracji z Django i mod_wsgi do serwera Apache.

Continue reading Django + pyenv-vierualenv + mod_wsgi