Bezstanowość protokołu HTTP jest faktem. Niezależnie od tego, czego chciałby autor danej aplikacji. Na przykład nie jest prawdą, że jeden proces lub wątek serwera jest przypisany jednemu, konkretnemu odwiedzającemu stronę. Wybaczcie zatem łzy, które zakręciły mi się w oczach na widok tego: def _get_taxprocessor(request=None): taxprocessor = get_thread_variable(‘taxer’, None) if not taxprocessor: if request: user = request.user […]
Posts Tagged ‘django’
Być jak Satchmo
Z pewnością naczytałeś się już, jakie to Satchmo nie jest doskonałe, zazdrościsz i chciałbyś stworzyć coś równie wspaniałego. Dość jednak nieprzespanych nocy, albowiem przygotowałem krótki poradnik, który w kilku krokach pozwoli ci dorównać mistrzom. Sięgaj tam, gdzie import nie sięga Tak jest, zacznij od stworzenia modułu z myślnikiem w nazwie. Niestety, oczywista nazwa email-auth.py została […]
Django: abstrakcji ciąg dalszy
Tym razem inne podejście, naturalne dziedziczenie abstrakcyjnych modeli z dwoma dodatkowymi metodami. W przeciwieństwie do poprzedniego przykładu, pozwala używać super() w abstrakcyjnych klasach pośrednich. from django.db import models class AbstractMixin(object): _classcache = {} @classmethod def contribute(cls): return {} @classmethod def construct(cls, *args, **kwargs): attrs = cls.contribute(*args, **kwargs) attrs.update({ ‘__module__’: cls.__module__, ‘Meta’: type(‘Meta’, (), {‘abstract’: True}), […]
Django: zabawa z abstrakcją
Zastanawialiśmy się ostatnimi czasy, w jaki sposób zbudować aplikację tak, by z jednej strony była uniwersalna (abstrakcyjne modele bazowe), a z drugiej zawierała całą niezbędną logikę. Problem polega na tym, że — z oczywistych względów — klucza obcego do modelu abstrakcyjnego stworzyć się nie da. Pozostaje więc zwalić pracę na programistę, który konkretyzuje abstrakcyjne prototypy, […]
Django: TestCase i testowanie szablonów
Bardzo brzydki hack, oparty o załącznik do ticketu 7611. Czyści wewnętrzny cache Django, ale pozwala testować działanie kodu opierającego się o renderowanie szablonów bez ryzyka, że aplikacja owe szablony nadpisze: import os import sys from django.conf import settings from django.template import loader from django.test import TestCase class TemplateTestCase(TestCase): def _pre_setup(self): self._template_setup() super(TemplateTestCase, self)._pre_setup() def _post_teardown(self): […]
Django: pluralize
Najważniejszą rzeczą, jaką powinniście wiedzieć na temat filtra pluralize jest ta, żeby go nigdy nie używać. Nigdy. Jego istnienie wynika z lenistwa ludzi, którzy nigdy w życiu nie przygotowywali aplikacji do tłumaczenia. Jeśli nie wyraziłem się dość jasno, używanie filtra pluralize wywoła u ciebie raka, stereoporoże i zatwardzenie rozsiane. Jakkolwiek sprytnie by nie wyglądał, ten […]
Django: direct_to_template
Nie wiem, czemu niektórzy tak uparcie korzystają z funkcji render_to_response, by za każdym razem przekazać do niej ręcznie stworzony obiekt kontekstu. Zresztą, sami oceńcie, która wersja jest ładniejsza: from django.shortcuts import render_to_response from django.template import RequestContext def foo(request): # … return render_to_response(‘foo.html’, {‘bar’: baz}, context_instance=RequestContext(request)) Czy może: from django.views.generic.simple import direct_to_template def foo(request): # … […]
Django: szybszy SQLite do testów
Domyślna konfiguracja SQLite każe mu synchronizować plik bazy po każdej operacji. W środowiskach testowych nie musimy się martwić o spójność danych w wypadku awarii, poniżej zamieszczam więc backend pozbawiony zbędnego narzutu: from django.db.backends.sqlite3.base import ( DatabaseWrapper as Sqlite3Wrapper, DatabaseError, IntegrityError, DatabaseFeatures, DatabaseOperations, ) class DatabaseWrapper(Sqlite3Wrapper): def _cursor(self): new_conn = self.connection is None cursor = super(DatabaseWrapper, […]
Django: alternatywa dla Form.as_table()
Domyślna struktura generowana przez metodę django.forms.Form.as_table pozostawia nieco do życzenia. Stąd nieco wygodniejsza i nieinwazyjna wersja w postaci filtra (zastanawiam się, czemu ta wbudowana w Django ma postać metody): from django.template.loader import render_to_string @register.filter def as_table(form): return render_to_string(‘form_as_table.html’, {‘form’: form}) Do kompletu przykładowy szablon: {% for f in form %} {% if f.errors %} <tr […]
Django: Decimal i simplejson
Moduł django.utils.simplejson nie obsługuje domyślnie typu decimal.Decimal. Na szczęście da się podać własny mechanizm kodowania nieznanych typów: import decimal def json_encoder(value): if isinstance(value, decimal.Decimal): return float(str(value)) else: raise TypeError from django.utils import simplejson print simplejson.dumps([decimal.Decimal(‘1.2′)], default=json_encoder)

