Open Source

Społeczność

Ta strona, odświeżana co godzinę, zbiera wpisy z blogów na tematy związane z Django

Definiowanie własnej metody save()

Posted on Maj 10, 2009 at 3:51 po południu by Michał Dydecki RSS

Metoda save() jest bardzo wygodna, jednak nie zawsze portrzebujemy tylko zapisać dane do bazy danych, lecz przed zapisaniem jeszcze coś z nimi zrobić. Przykład będzie trywialny , lecz chodzi o zobrazowanie zasady działania a nie przedstawianie super skomplikowanych rzeczy.Ok, więc do dzieła. Cel:stworzymy model składający sie z 3 pól name , text oraz text_upper , text_upper ma podaczas zapisu do bazy danych textu ma automatycznie zapisywać ten sam tekst tylko i wyłącznie dużymi literami. Model: from django.db import modelsclass TextUpper(models.Model):     name = models.CharField(max_length=255)     text = models.TextField()     text_upper = models.TextField(blank=True,editable=False)     def __unicode__(self):        return self.name     def save(self):        self.text_upper = self.text.upper()        super(TextUpper , self).save() I tyle , nic specjalnie trudnego."Super"  w pythonie odnosi się do klasy "rodzica" ,  do której moze dodawać bądź nadpisywać metody.

Przeczytaj cały wpis »

Autoryzacja przez clickpass kontra rpx

Posted on Maj 10, 2009 at 9:10 rano by Dominik Szopa RSS

RPX jest podobną usługą do clickpass - upraszcza logowanie z systemów gdzie użytkownicy już mają konta. Zasada działania jest bardzo podobna. System ten również opiera się o OpenID. Istnieje także implementacja rpx dla django - http://code.google.com/p/django-newrpx/ rpx wydaje się lepsze od clickpass, z tego względu że użytkownik dużo łatwiej się może zalogować, praktycznie po autoryzacji w systemie zewnętrznym jest już zalogowany, przy clickpass po autoryzacji pokazuje się formularz rejestracyjny z wypełnionymi danymi( typu: email, opcjonalnie imię, nazwisko) i trzeba ręcznie wpisać nazwę użytkownika jaki będzie utworzony. W rpx się tego nie robi, wszystko się dzieje z automatu, nazwa użytkownika jest z automatu przekazywana(z systemu w którym wcześniej odbyła się autoryzacja) do backend’u autoryzacji który sam tworzy nowego użytkownika i go loguje. Przy następnym logowaniu backend sprawdza czy login użytkownika(przekazany np. z google accounts) istnieje już i go loguje. W jednym i drugim przypadku logowanie to tak naprawdę 2-3 kliknięcia myszą. Teraz na temat samej implementacji rpx w django Pakiet django-newrpx był dosyć z bugowany – parę drobnych bugów w kodzie, udało mi się wszystko popoprawiać i wysłać pacha do autora. W django-newrpx w przeciwieństwie do django-clickpass nie ma zaimplementowanego tzn "account merge"(samo rpx obsługuje tą opcje- Mapping API) jest to ...

Przeczytaj cały wpis »

Autoryzacja przez clickpass kontra rpx

Posted on Maj 10, 2009 at 9:10 rano by Dominik Szopa RSS

RPX jest podobną usługą do clickpass - upraszcza logowanie z systemów gdzie użytkownicy już mają konta. Zasada działania jest bardzo podobna. System ten również opiera się o OpenID. Istnieje także implementacja rpx dla django - http://code.google.com/p/django-newrpx/ rpx wydaje się lepsze od clickpass, z tego względu że użytkownik dużo łatwiej się może zalogować, praktycznie po autoryzacji w systemie zewnętrznym jest już zalogowany, przy clickpass po autoryzacji pokazuje się formularz rejestracyjny z wypełnionymi danymi( typu: email, opcjonalnie imię, nazwisko) i trzeba ręcznie wpisać nazwę użytkownika jaki będzie utworzony. W rpx się tego nie robi, wszystko się dzieje z automatu, nazwa użytkownika jest z automatu przekazywana(z systemu w którym wcześniej odbyła się autoryzacja) do backend’u autoryzacji który sam tworzy nowego użytkownika i go loguje. Przy następnym logowaniu backend sprawdza czy login użytkownika(przekazany np. z google accounts) istnieje już i go loguje. W jednym i drugim przypadku logowanie to tak naprawdę 2-3 kliknięcia myszą. Teraz na temat samej implementacji rpx w django Pakiet django-newrpx był dosyć z bugowany – parę drobnych bugów w kodzie, udało mi się wszystko popoprawiać i wysłać pacha do autora. W django-newrpx w przeciwieństwie do django-clickpass nie ma zaimplementowanego tzn "account merge"(samo rpx obsługuje tą opcje- Mapping API) jest to ...

Przeczytaj cały wpis »

django bug #8620 - ModelForm i exclude

Posted on Maj 7, 2009 at 9:14 rano by Marcin Nowak RSS

Django svn/1.0.2 zawiera irytujący błąd, który uniemożliwia wyłączanie niektórych pól z formularza, jeśli je redefiniowano za pomocą class properties klasy dziedziczącej:class RegisterForm(ModelForm): email = forms.EmailField() password = forms.CharField(widget=widgets.PasswordInput) name = forms.CharField() birthdate = forms.DateField(widget=widgets.DateTimeInput,required=False) class Meta: model = models.Person fields = ('email','password','name','birthdate')class CustomRegisterForm(RegisterForm): class Meta(RegisterForm.Meta): exclude = ['birthdate'] fields = ['email','password','name']W powyższym przypadku "birthdate" zmieni tylko swoje położenie - pojawi się na końcu formularza.Tymczasowym rozwiązaniem jest utworzenie własnego modułu forms.py:from django.forms.models import ModelForm as BaseModelFormclass FixedModelFormMetaclass(ModelFormMetaclass): """ meta class for model forms with fixed ticket #8620 """ def __new__(cls, name, bases, attrs): formfield_callback = attrs.pop('formfield_callback', lambda f: f.formfield()) try: parents = [b for b in bases if issubclass(b, ModelForm)] except NameError: # We are defining ModelForm itself. parents = None declared_fields = get_declared_fields(bases, attrs, False) new_class = super(FixedModelFormMetaclass, cls).__new__(cls, name, bases, attrs) if not parents: return new_class if 'media' not in attrs: new_class.media = media_property(new_class) opts = new_class._meta = ModelFormOptions(getattr(new_class, 'Meta', None)) if opts.model: # If a model is defined, extract form fields from it. fields = fields_for_model(opts.model, opts.fields, opts.exclude, formfield_callback) # Override default model fields with any custom declared ones # (plus, include all the other declared fields). # 8620 fix: if opts.fields: [declared_fields.pop(f) for f in declared_fields.keys() if ...

Przeczytaj cały wpis »

Django - edytowalne komentarze

Posted on Maj 5, 2009 at 7:00 rano by Dominik Szopa RSS

Domyślnie w django 1.0.2 w wbudowanych komentarzach nie ma możliwości edytowania komentarzy, brakowało mi tej funkcjonalności, więc postanowiłem rozszerzyć istniejące komentarze o edycje komentarzy. Zauważyłem także że nowe komentarze dodane w django 1.0 nie posiadają funkcji uzupełniania danych użytkownika(jeżeli jest zalogowany), podczas dodawania komentarza mimo iż model Comment jest powiązany teraz z modelem User z aplikacji auth. Rozszerzyłem więc komentarze o tą funkcjonalność. Po dyskusji na ten temat na kanale #django-pl został utworzony ticket na stronie projektu Django z tym związany. Zależało mi aby używać tego samego mechanizmu zarówno do edycji komentarzy przez zalogowanych użytkowników jak i przy dodawaniu nowych komentarzy. Aby to zrealizować wystarczy stworzyć własnego tag'a który będzie używać klasy po dziedziczonej po klasie RenderCommentFormNode, tag'a ten będzie używany do generowania formularza dodawania lub edycji komentarza, zamiast domyślnego tag'a. from django.contrib.comments.templatetags.comments import RenderCommentFormNode class EditRenderCommentFormNode(RenderCommentFormNode): """Render the comment form directly""" def get_form(self, context): ctype, object_pk = self.get_target_ctype_pk(context) if object_pk: comment = context.get('comment', None) if comment: initial = dict(name=comment.user_name, email=comment.user_email, url=comment.user_url, comment=comment.comment ) else: request = context['request'] initial = dict(name=request.user.get_full_name() or request.user.username, email=request.user.email, ) return EditCommentForm(target_object=ctype.get_object_for_this_type(pk=object_pk), initial=initial) else: return None @register.tag def render_edit_comment_form(parser, token): """ Render the comment form (as returned by ``{% render_edit_comment_form %}``) through the ``comments/form.html`` template. ...

Przeczytaj cały wpis »

Django - edytowalne komentarze

Posted on Maj 5, 2009 at 7:00 rano by Dominik Szopa RSS

Domyślnie w django 1.0.2 w wbudowanych komentarzach nie ma możliwości edytowania komentarzy, brakowało mi tej funkcjonalności, więc postanowiłem rozszerzyć istniejące komentarze o edycje komentarzy. Zauważyłem także że nowe komentarze dodane w django 1.0 nie posiadają funkcji uzupełniania danych użytkownika(jeżeli jest zalogowany), podczas dodawania komentarza mimo iż model Comment jest powiązany teraz z modelem User z aplikacji auth. Rozszerzyłem więc komentarze o tą funkcjonalność. Po dyskusji na ten temat na kanale #django-pl został utworzony ticket na stronie projektu Django z tym związany. Zależało mi aby używać tego samego mechanizmu zarówno do edycji komentarzy przez zalogowanych użytkowników jak i przy dodawaniu nowych komentarzy. Aby to zrealizować wystarczy stworzyć własnego tag'a który będzie używać klasy po dziedziczonej po klasie RenderCommentFormNode, tag'a ten będzie używany do generowania formularza dodawania lub edycji komentarza, zamiast domyślnego tag'a. from django.contrib.comments.templatetags.comments import RenderCommentFormNode class EditRenderCommentFormNode(RenderCommentFormNode): """Render the comment form directly""" def get_form(self, context): ctype, object_pk = self.get_target_ctype_pk(context) if object_pk: comment = context.get('comment', None) if comment: initial = dict(name=comment.user_name, email=comment.user_email, url=comment.user_url, comment=comment.comment ) else: request = context['request'] initial = dict(name=request.user.get_full_name() or request.user.username, email=request.user.email, ) return EditCommentForm(target_object=ctype.get_object_for_this_type(pk=object_pk), initial=initial) else: return None @register.tag def render_edit_comment_form(parser, token): """ Render the comment form (as returned by ``{% render_edit_comment_form %}``) through the ``comments/form.html`` template. ...

Przeczytaj cały wpis »

Django - ciągle zaskakuje

Posted on Kwiecień 30, 2009 at 7:54 rano by Marcin Nowak RSS

Przejście z PHP/Symfony na Python/Django wymusza inne spojrzenie na architekturę aplikacji i projektów. Na każdym kroku wyzbywam się złych przyzwyczajeń i uczę się nowej filozofii.Dziś chcę podzielić się kilkoma istotnymi uwagami, tak z punktu widzenia newbie. Jednocześnie zaznaczam, że tekst nie jest skierowany do wyjadaczy Django, a dla ludzi przechodzących na jasną stronę mocy.Aplikacje DjangoNie są aplikacjami w rozumieniu aplikacji Symfony. Są to swego rodzaju pluginy, które dostarczają elementów całemu projektowi. Tymi elementami (klockami) są: widoki (kontrolery), szablony, formularze, widgety, helpery, modele danych, katalogi tłumaczeń.W przeciwieństwie do Symfony można używać ich z poziomu innych aplikacji (w końcu rozumiem termin reusable apps ;).Projekt Django może być odpowiednikiem aplikacji Symfony, jednakże są pewne różnice. Główna to taka, że projekt może dostarczać i używać innych aplikacji.Moje nowe projekty buduję po prostu z pakietów zawierających aplikacje Django i inne potrzebne do działania systemu pakiety/moduły.SzablonyNie ma potrzeby wpisywania ręcznie ścieżek do szablonów. Django ma wbudowany resolver django.template.loaders.app_directories.load_template_source, który dodaje ścieżki poszukiwań szablonów na podstawie wpisów w settings.INSTALLED_APPS (uwaga, kolejność ma znaczenie!)Ponad to Django dostarcza loader szablonów z paczek egg django.template.loaders.eggs.load_template_source.Batchadmin i Grappelli.Grappeli to aplikacja modyfikująca i rozszerzająca aplikację panelu administracyjnego.Dostarcza własne szablony przesłaniając szablony bazowe.Gdy używałem jeszcze aplikacji batchadmin (operacje grupowe na listach), to miałem ...

Przeczytaj cały wpis »

System szablonów - cz.1

Posted on Kwiecień 24, 2009 at 7:22 po południu by Michał Dydecki RSS

System szablonów django nie jest szczególnie trudny do zrozumienia, ale mimo wszystko uważam że należało by opisać poszczególne funkcję. Najprościej będzie podzielić go na 4 podstatowe grupy: 1.Zmienne Mam {{color}} samochód. Co da nam wynik "Mam czerwony samochód" ( pod warunkiem ze zmienna color == "czerwony" ) 2.Filtry: Mam {{color|upper}} samochód. Wynik "Mam CZERWONY samochód" , czyli na zmienna którą przekazujemy do szablonu nakładamy filtr ( po prostu pythonowe upper() ) 3.Tagi: {%ifequal color "red"%}Mój samochód jest czerwony{%else%}Jest innego koloru niż czerwony{%endifequal%} Jeżeli zmienna color bedzie równa red w wyrenderowanym szablonie zobaczymy pierwszy napis (Mój samochód... ) , jeżeli bedzie inaczej 2 (taki trochę inny IF..ELSE ) 4.Komentarze: {#To jest komenatrz#} {%comment%} #Tu cały komentarz wielolinijkowy {%endcomment%} Komentarz chyba nie wymaga komentarza. DOSTĘPNE FILTRY: -{{value|add:"5"}} - Filtr add dodaje do wartości zmiennej wartość 5 , jeżeli zmienna przechowuje tekst otrzymamy błąd. -{{value|capfirst}} - Zmienia pierwszą litere zmiennej na wielką. -{{value|center}} - Centruje zawartość zmiennej względem pola o zadanej szerokości (divem , tabelą itp...) -{{value|cut:"a"}} - Jeżeli zawartość zmiennej to "aa ab ac ad", to po zrenderowaniu otrzymamy " b c d". -{{value|date:"D d M Y"}} - Formatuje zmienna ( date ) według określonego formatowania daty. ( przydatne np. gdy w ...

Przeczytaj cały wpis »

System szablonów - cz.1

Posted on Kwiecień 24, 2009 at 7:22 po południu by Michał Dydecki RSS

System szablonów django nie jest szczególnie trudny do zrozumienia, ale mimo wszystko uważam że należało by opisać poszczególne funkcję. Najprościej będzie podzielić go na 4 podstatowe grupy: 1.Zmienne Mam {{color}} samochód. Co da nam wynik "Mam czerwony samochód" ( pod warunkiem ze zmienna color == "czerwony" ) 2.Filtry: Mam {{color|upper}} samochód. Wynik "Mam CZERWONY samochód" , czyli na zmienna którą przekazujemy do szablonu nakładamy filtr ( po prostu pythonowe upper() ) 3.Tagi: {%ifequal color "red"%}Mój samochód jest czerwony{%else%}Jest innego koloru niż czerwony{%endifequal%} Jeżeli zmienna color bedzie równa red w wyrenderowanym szablonie zobaczymy pierwszy napis (Mój samochód... ) , jeżeli bedzie inaczej 2 (taki trochę inny IF..ELSE ) 4.Komentarze: {#To jest komenatrz#} {%comment%} #Tu cały komentarz wielolinijkowy {%endcomment%} Komentarz chyba nie wymaga komentarza. DOSTĘPNE FILTRY: -{{value|add:"5"}} - Filtr add dodaje do wartości zmiennej wartość 5 , jeżeli zmienna przechowuje tekst otrzymamy błąd. -{{value|capfirst}} - Zmienia pierwszą litere zmiennej na wielką. -{{value|center}} - Centruje zawartość zmiennej względem pola o zadanej szerokości (divem , tabelą itp...) -{{value|cut:"a"}} - Jeżeli zawartość zmiennej to "aa ab ac ad", to po zrenderowaniu otrzymamy " b c d". -{{value|date:"D d M Y"}} - Formatuje zmienna ( date ) według określonego formatowania daty. ( przydatne np. gdy w ...

Przeczytaj cały wpis »

Django - poczatki inne niż wszystkie

Posted on Kwiecień 23, 2009 at 11:19 po południu by Michał Dydecki RSS

Z tego co widze to chyba 99% przypadków tzw. wstępu do django opiera sie na budowaniu blogu, takiego podstawowego (podobnego do tego jaki własnie czytasz:)). Ja zresztą tak samo zaczynałem, ale szczerze musze przyznać że mi się udało zrobić coś co działa, ale wogole nie wiedziałem co, gdzie i dlaczego. Grunt to wiedzieć co to jest i do czego służy, a wtedy pisanie kodu staje sie naprawde przyjemne. Od czego najlepiej zacząć?? Chyba od wystartowanie projektu i skonfigurowania settings.py, ale nie ma sensu żebym teraz o tym pisał, jest to opisane na każdym portalu dotyczącym django, więc po co powielać.Może dodam tylko od siebie ze do tworzenia aplikacji i testów najwygodniej jest używać sqlite (w settingsach podajemy poprostu nazwe pliku np. test.sqlite i taki plik z naszą testową bazą utworzy się w katalogu projektu, dodam że automatyczne tworzenie bazy danych w django dotyczy tylko sqlite , jeżeli chcemy używać MySQL lub PostgreSQL to tworzymy najpierw odpowiednią bazę i dopiero później wpisujemy dane do konfiguracji django.... niby oczywiste ale wiadomo ze diabeł tkwi w szczegółach.). Do dalszej części bedzie nam potrzebna działający projekt django i panel admina ( czyli nasz urls.py powinien wyglądać mniej więcej tak: from django.conf.urls.defaults import *# Uncomment ...

Przeczytaj cały wpis »

Django - poczatki inne niż wszystkie

Posted on Kwiecień 23, 2009 at 11:19 po południu by Michał Dydecki RSS

Z tego co widze to chyba 99% przypadków tzw. wstępu do django opiera sie na budowaniu blogu, takiego podstawowego (podobnego do tego jaki własnie czytasz:)). Ja zresztą tak samo zaczynałem, ale szczerze musze przyznać że mi się udało zrobić coś co działa, ale wogole nie wiedziałem co, gdzie i dlaczego. Grunt to wiedzieć co to jest i do czego służy, a wtedy pisanie kodu staje sie naprawde przyjemne. Od czego najlepiej zacząć?? Chyba od wystartowanie projektu i skonfigurowania settings.py, ale nie ma sensu żebym teraz o tym pisał, jest to opisane na każdym portalu dotyczącym django, więc po co powielać.Może dodam tylko od siebie ze do tworzenia aplikacji i testów najwygodniej jest używać sqlite (w settingsach podajemy poprostu nazwe pliku np. test.sqlite i taki plik z naszą testową bazą utworzy się w katalogu projektu, dodam że automatyczne tworzenie bazy danych w django dotyczy tylko sqlite , jeżeli chcemy używać MySQL lub PostgreSQL to tworzymy najpierw odpowiednią bazę i dopiero później wpisujemy dane do konfiguracji django.... niby oczywiste ale wiadomo ze diabeł tkwi w szczegółach.). Do dalszej części bedzie nam potrzebna działający projekt django i panel admina ( czyli nasz urls.py powinien wyglądać mniej więcej tak: from django.conf.urls.defaults import *# Uncomment ...

Przeczytaj cały wpis »

Django - autoryzacja przez Clickpass - tutorial

Posted on Kwiecień 7, 2009 at 8:13 rano by Dominik Szopa RSS

Clickpass umożliwia proste logowanie użytkowników za pomocą kont które już posiadają w innych systemach, np. hotmail, yahoo, google, facebook, aim, clickpass lub OpenID. Zasadę działania opisywałem w poprzednim poście. Teraz pokaże jak zaimplementować to w Django. Korzystam z aplikacji która ostatnio udostępniło washingtontimes, a mianowicie django-clickpass. Jest to aplikacja która bardzo upraszcza wykorzystanie clickpass w django. Instalacja Zainstaluj django-openid: svn co http://django-openid.googlecode.com/svn/trunk/django_openid django-openid Zainstaluj paczkę python OpenID 2.2.1 - http://openidenabled.com/files/python-openid/packages/python-openid-2.2.1.tar.gz. Szczegółowe instrukcje znajdziesz tutaj: http://www.openidenabled.com/python-openid/ Dodaj django_openid do Twoich INSTALLED_APPS. Zainstaluj django-clickpass: svn co http://opensource.washingtontimes.com/projects/public/django-clickpass/trunk/clickpass clickpass Dodaj clickpass do Twoich INSTALLED_APPS. Do głównych urls.py dodaj from clickpass.consumer import ClickPassConsumer Dodaj (r'^openid/(.*)', ClickPassConsumer()), do Twoich urlpatterns w urls.py: Przykład urls.py, do dodaniu ClickPassConsummer: from clickpass.consumer import ClickPassConsumer urlpatterns = patterns('', (r'^admin/(.*)', admin.site.root), (r'^moja_aplikacja/', include('moj_projekt.moja_aplikacja.urls')), (r'^openid/(.*)', ClickPassConsumer()), ) Dodaj clickpass.consumer.ClickPassConsumer do MIDDLEWARE_CLASSES gdzieś po django.contrib.sessions.middleware.SessionMiddleware, np: Przykład: MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'clickpass.consumer.ClickPassConsumer', 'django_openid.consumer.SessionConsumer', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.middleware.doc.XViewMiddleware', ) W szablonach możesz dodać przycisk clickpass za pomoca template tag'a clickpass_button_large* lub clickpass_button_small. {% load clickpass %} {% if user.is_anonymous %} Zaloguj się {% clickpass_button_small %} {% else %} Zalogowano jako: {{user.first_name}} {{user.last_name}} {% endif %} Możesz także napisać kilka domyślnych szablonów które używa django-openid. Szablony są w katalogu: django_openid/templates/django_openid Konfiguracja konta clickpass Załóż tzw. ...

Przeczytaj cały wpis »

Django - autoryzacja przez Clickpass - tutorial

Posted on Kwiecień 7, 2009 at 8:13 rano by Dominik Szopa RSS

Clickpass umożliwia proste logowanie użytkowników za pomocą kont które już posiadają w innych systemach, np. hotmail, yahoo, google, facebook, aim, clickpass lub OpenID. Zasadę działania opisywałem w poprzednim poście. Teraz pokaże jak zaimplementować to w Django. Korzystam z aplikacji która ostatnio udostępniło washingtontimes, a mianowicie django-clickpass. Jest to aplikacja która bardzo upraszcza wykorzystanie clickpass w django. Instalacja Zainstaluj django-openid: svn co http://django-openid.googlecode.com/svn/trunk/django_openid django_openid Zainstaluj paczkę python OpenID 2.2.1 - http://openidenabled.com/files/python-openid/packages/python-openid-2.2.1.tar.gz. Szczegółowe instrukcje znajdziesz tutaj: http://www.openidenabled.com/python-openid/ Dodaj django_openid do Twoich INSTALLED_APPS. Zainstaluj django-clickpass: svn co http://opensource.washingtontimes.com/projects/public/django-clickpass/trunk/clickpass clickpass Dodaj clickpass do Twoich INSTALLED_APPS. Do głównych urls.py dodaj from clickpass.consumer import ClickPassConsumer Dodaj (r'^openid/(.*)', ClickPassConsumer()), do Twoich urlpatterns w urls.py: Przykład urls.py, do dodaniu ClickPassConsummer: from clickpass.consumer import ClickPassConsumer urlpatterns = patterns('', (r'^admin/(.*)', admin.site.root), (r'^moja_aplikacja/', include('moj_projekt.moja_aplikacja.urls')), (r'^openid/(.*)', ClickPassConsumer()), ) Dodaj clickpass.consumer.ClickPassConsumer do MIDDLEWARE_CLASSES gdzieś po django.contrib.sessions.middleware.SessionMiddleware, np: Przykład: MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'clickpass.consumer.ClickPassConsumer', 'django_openid.consumer.SessionConsumer', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.middleware.doc.XViewMiddleware', ) W szablonach możesz dodać przycisk clickpass za pomoca template tag'a clickpass_button_large* lub clickpass_button_small. {% load clickpass %} {% if user.is_anonymous %} Zaloguj się {% clickpass_button_small %} {% else %} Zalogowano jako: {{user.first_name}} {{user.last_name}} {% endif %} Możesz także napisać kilka domyślnych szablonów które używa django-openid. Szablony są w katalogu: django_openid/templates/django_openid Konfiguracja konta clickpass Załóż tzw. ...

Przeczytaj cały wpis »

Polski hackerspace

Posted on Kwiecień 6, 2009 at 1:31 po południu by Marcin Kaszyński RSS

W sobotę odbył się sprzętowy Bootstrap, między innymi z Olle i Christofferem – gośćmi z Forskningsavdelningen, hackerspace w Malmö. Ogłosiłem też publicznie, że knujemy utworzenie takiego klubu w Warszawie. Na razie mamy grupę dyskusyjną, datę spotkania organizacyjnego (czwartek) i szybko rosnącą grupę zainteresowanych. Szczegóły w tym wpisie na grupie: Spotkanie? Jeśli jesteś zainteresowan[ay] i możesz pomóc – zapraszam serdecznie na grupę. Co [...]

Przeczytaj cały wpis »

Nowa wersja bloga - czyli jak stworzyłem bloga marzeń

Posted on Kwiecień 4, 2009 at 7:00 rano by Dominik Szopa RSS

Przez ostatni czas przepisywałem tego bloga na django 1.0. Gdy pisałem tego bloga około 1.5 roku temu, miałem małe pojęcie o django i python, teraz gdy nabrałem trochę doświadczenia z django i python'em, postanowiłem sobie napisać swojego bloga marzeń. Ktoś mógł by powiedzieć po co pisać bloga od podstaw, przecież można skorzystać z jakiegoś gotowca, jednak ja to traktuje jako takie poletko doświadczalne, miejsce gdzie mogę poeksperymentować z nowymi bibliotekami, narzędziami itd. Pozwala to na nauczenie się czegoś nowego, na co nie koniecznie ma się czas podczas co dziennej pracy zawodowej oraz przekazanie zdobytej wiedzy społeczności. Mój nowy blog posiada następujące funkcje: Autoryzacja wykorzystując django-clickpass django-clickpass jest jednym z projektów ostatnio udostępnionych przez washingtontimes. Implementuje mechanizm autoryzacji clickpass. Clickpass pozwala na logowanie z hotmail, yahoo, google, facebook, aim, clickpass lub OpenID. Zasada działania: Wejście na stronę Przycisk Clickpass ładuje uzupełniony formularz zawierający OpenID użytkownika Użytkownik klika w przycisk Jeżeli logujemy się pierwszy raz, clickpass zapyta czy mamy już konto w jednym z popularnych serwisów, jeżeli tak, to przekieruje do autoryzacji w tym serwisie, następnie wygeneruje OpenID i skojarzy je z serwisem który wybraliśmy. OpenID jest wysłane bezpośrednio przez Clickpass do twojej strony Następuje proces autoryzacji OpenID jak przy zwykłym OpenID ...

Przeczytaj cały wpis »