Posts Tagged ‘django’

To jest mój wątek i nie oddam go nikomu

Bez­sta­no­wość pro­to­kołu HTTP jest fak­tem. Nie­za­leż­nie od tego, czego chciałby autor danej apli­ka­cji. Na przy­kład nie jest prawdą, że jeden pro­ces lub wątek ser­wera jest przy­pi­sany jed­nemu, kon­kret­nemu odwie­dza­ją­cemu stronę. Wybacz­cie zatem łzy, które zakrę­ciły mi się w oczach na widok tego: def _get_taxprocessor(request=None): taxpro­ces­sor = get_thread_variable(‘taxer’, None) if not taxpro­ces­sor: if requ­est: user = request.user […]

Być jak Satchmo

Z pew­no­ścią naczy­ta­łeś się już, jakie to Satchmo nie jest dosko­nałe, zazdro­ścisz i chciał­byś stwo­rzyć coś rów­nie wspa­nia­łego. Dość jed­nak nie­prze­spa­nych nocy, albo­wiem przy­go­to­wa­łem krótki porad­nik, który w kilku kro­kach pozwoli ci dorów­nać mistrzom. Się­gaj tam, gdzie import nie sięga Tak jest, zacznij od stwo­rze­nia modułu z myśl­ni­kiem w nazwie. Nie­stety, oczy­wi­sta nazwa email-auth.py została […]

Django: abstrakcji ciąg dalszy

Tym razem inne podej­ście, natu­ralne dzie­dzi­cze­nie abs­trak­cyj­nych modeli z dwoma dodat­ko­wymi meto­dami. W prze­ci­wień­stwie do poprzed­niego przy­kładu, pozwala uży­wać super() w abs­trak­cyj­nych kla­sach pośred­nich. 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’, (), {‘abs­tract’: True}), […]

Django: zabawa z abstrakcją

Zasta­na­wia­li­śmy się ostat­nimi czasy, w jaki spo­sób zbu­do­wać apli­ka­cję tak, by z jed­nej strony była uni­wer­salna (abs­trak­cyjne modele bazowe), a z dru­giej zawie­rała całą nie­zbędną logikę. Pro­blem polega na tym, że — z oczy­wi­stych wzglę­dów — klu­cza obcego do modelu abs­trak­cyj­nego stwo­rzyć się nie da. Pozo­staje więc zwa­lić pracę na pro­gra­mi­stę, który kon­kre­ty­zuje abs­trak­cyjne prototypy, […]

Django: TestCase i testowanie szablonów

Bar­dzo brzydki hack, oparty o załącz­nik do tic­ketu 7611. Czy­ści wewnętrzny cache Django, ale pozwala testo­wać dzia­ła­nie kodu opie­ra­ją­cego się o ren­de­ro­wa­nie sza­blo­nów bez ryzyka, że apli­ka­cja owe sza­blony nad­pi­sze: import os import sys from django.conf import set­tings from django.template import loader from django.test import Test­Case class TemplateTestCase(TestCase): def _pre_setup(self): self._template_setup() super(TemplateTestCase, self)._pre_setup() def _post_teardown(self): […]

Django: pluralize

Naj­waż­niej­szą rze­czą, jaką powin­ni­ście wie­dzieć na temat fil­tra plu­ra­lize jest ta, żeby go nigdy nie uży­wać. Nigdy. Jego ist­nie­nie wynika z leni­stwa ludzi, któ­rzy nigdy w życiu nie przy­go­to­wy­wali apli­ka­cji do tłu­ma­cze­nia. Jeśli nie wyra­zi­łem się dość jasno, uży­wa­nie fil­tra plu­ra­lize wywoła u cie­bie raka, ste­reo­po­roże i zatwar­dze­nie roz­siane. Jak­kol­wiek spryt­nie by nie wyglą­dał, ten […]

Django: direct_to_template

Nie wiem, czemu nie­któ­rzy tak upar­cie korzy­stają z funk­cji render_to_response, by za każ­dym razem prze­ka­zać do niej ręcz­nie stwo­rzony obiekt kon­tek­stu. Zresztą, sami oceń­cie, która wer­sja jest ładniej­sza: from django.shortcuts import render_to_response from django.template import Requ­est­Con­text 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 kon­fi­gu­ra­cja SQLite każe mu syn­chro­ni­zo­wać plik bazy po każ­dej ope­ra­cji. W środo­wi­skach testo­wych nie musimy się mar­twić o spój­ność danych w wypadku awa­rii, poni­żej zamiesz­czam więc bac­kend pozba­wiony zbęd­nego narzutu: from django.db.backends.sqlite3.base import ( Data­ba­seW­rap­per as Sqlite3Wrapper, Data­ba­se­Er­ror, Inte­gri­ty­Er­ror, Data­ba­se­Fe­atu­res, Data­ba­se­Ope­ra­tions, ) class DatabaseWrapper(Sqlite3Wrapper): def _cursor(self): new_conn = self.connection is None cur­sor = super(DatabaseWrapper, […]

Django: alternatywa dla Form.as_table()

Domyślna struk­tura gene­ro­wana przez metodę django.forms.Form.as_table pozo­sta­wia nieco do życze­nia. Stąd nieco wygod­niej­sza i nie­in­wa­zyjna wer­sja w postaci fil­tra (zasta­na­wiam się, czemu ta wbu­do­wana 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 kom­pletu przy­kła­dowy sza­blon: {% for f in form %} {% if f.errors %} <tr […]

Django: Decimal i simplejson

Moduł django.utils.simplejson nie obsłu­guje domyśl­nie typu decimal.Decimal. Na szczę­ście da się podać wła­sny mecha­nizm kodo­wa­nia nie­zna­nych typów: import deci­mal def json_encoder(value): if isinstance(value, decimal.Decimal): return float(str(value)) else: raise Type­Er­ror from django.utils import sim­plej­son print simplejson.dumps([decimal.Decimal(‘1.2′)], default=json_encoder)

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 Poland
This work by Patryk Zawadzki is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 Poland.