The Essence of Programming

Help: Django potwierdzenie maila w formularzach

31 maja 2011
Borykam się z pewnym problemem i nie wiem jak go rozwiązać :-/ Mam model i formularz w Django:
from django import forms
from django.forms import ModelForm
from django.db import models

class Appointment(models.Model):
    first_name = models.CharField(max_length = 30, verbose_name = u'Imię')
    last_name = models.CharField(max_length = 60, verbose_name = u'Nazwisko')
    phone = models.CharField(max_length = 11, verbose_name = u'Telefon', blank = True)
    email = models.EmailField(verbose_name = u'E-mail', blank = True)

    class Meta:
        verbose_name

class AppointmentForm(forms.ModelForm):
    agree_personal_data = forms.BooleanField(required=True)         

    class Meta:
        model = Appointment = u'Wizyta'
        verbose_name_plural = u'Wizyty'
I pytanie jak mogę dodać żeby było poprawne wpisanie tylko jednego z rodzajów (telefon lub email) i żeby jeśli ktoś zdecyduje się na wpisanie maila wymagane było jego potwierdzenie (czyli drugi email wpisany w innym polu i porównana zawartość obu pól) ? Może szanowna brać Joggerowa mi pomoże? :)

Help: Probem z modelem w Django (powiązane artykuły)

24 października 2010

Męczę się już trochę z tym problemem, a być może ktoś będzie znał rozwiązanie.

Mam model:

class Article(models.Model):
    title = models.CharField(max_length = 120, verbose_name = u'Tytuł')
    long_content = models.TextField(verbose_name = u'Treść')
    short_content = models.TextField(verbose_name = u'Krótka treść')
    category = models.ForeignKey(ArticleCategory, verbose_name = u'Kategoria')
    slug = models.SlugField(max_length = 120, unique=True, verbose_name = u'Odnośnik')
    related_articles = models.ManyToManyField("Article", verbose_name = u'Powiązane artykuły', blank = True)

Pytanie brzmi:

Jak zrobić aby artykuły były powiązane dwustronnie? To znaczy jeśli, dodam w panelu administracyjnym, że "Artykuł nr 1" jest powiązany z "Artykuł nr 2", to jeśli wejdę na stronę edycji "Artykuł nr 2" to będę widział odpowiednie powiązanie z "Artykuł nr 1" ?

Server-status w Apache

14 czerwca 2010

Dziś zauważyłem, jak dodać statystyki serwera dla Apache. Jest to całkiem proste. Wystarczy tylko dodać do configu:

<Location "/server-status">
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Location>

Po otwarciu strony (np. http://localhost/server-status) otrzymujemy informacje dot. uptime'u serwera, ostatniego restartu, całkowietego transferu, loadu oraz aktualnych requestów.

Konfiguracja OpenVPN na routerze z DD-WRT

31 maja 2010

Jeśli posiadacie router z zainstalowanym DD-WRT to po pewnym czasie zaczniecie się zastanawiać jak wykorzystać jego możliwości. Jedną z nich jest VPN.

W poniższej instrukcji zamierzam przedstawić proces konfiguracji VPN na routerze z zainstalowanym DD-WRT

Instrukcja zakłada, że OpenSSL jest zainstalowany i nie tłumaczy procesu jego instalacji.

Dynamiczne parametry w Ajax.Autocompleter

03 stycznia 2010

Post ten rozpoczyna cykl krótkich notatek, jakie zapisywałem sobie na moim drugim blogu po angielsku a postanowiłem je dodać również tutaj.

Dwa dni temu miałem problem z Ajax.Autocompleter (z biblioteki script.aculo.us). Potrzebowałem użyć dynamicznych parametrów wysyłanych w żądaniu do serwera. Normalnie są one tworzone statycznie w czasie kiedy tworzona jest instancja klasy. Oczywiście można zmienić to zachowanie, np.:

new Ajax.Autocompleter(
    'search',
    'autocomplete_choices',
    'index.php?controller=search&action=autocomplete', {
        paramName: 'name',
        callback: function(element, entry) {
            return entry+"&"+Form.Element.serialize('type');
        }
    }
);

Wykorzystując callback możemy dodać dynamiczne parametry do naszych zapytań.

Może znacie jakiś lepszy/inny sposób?

Grupa o2 uruchamia swoje "apps"

06 grudnia 2009

Prawdopodobnie niewielu z was wie, ale jakiś czas temu Grupa o2 uruchomiła darmowe konta pocztowe we własnej domenie (podobnie jak Google Apps). Jest to pierwsza tego typu usługa w Polsce (mowa o portalach i większych graczach na rynku; nie licząc Google) i prawdopodobnie może zmienić układ sił jeśli chodzi o usługi kont pocztowych e-mail.

Co dostajemy po zarejestrowaniu się?
- dostęp do panelu zarządzania domeną
- 1000 kont e-mail w swoich domenach
- możliwość dodania 10 domen
- aliasy pocztowe
- grupy

Jak na Polskie warunki myślę, że przeciętnym użytkownikom powinno to w spokoju wystarczyć :)

Samo używanie i korzystanie z narzędzia jest intuicyjne i proste. Jeśli kupiliście domenę i chcecie skorzystać z darmowego i sprawdzonego rozwiązania, być może jest to okazja, aby się nad tym zastanowić i zainteresować.

Szczegółowe informacje znaleźć można na stronie prokonto.pl

Jak uruchomić WebInspector w Safari ?

13 stycznia 2009

Instrukcja aktywowania WebInspectora w Safari:

Piszemy w terminalu na Macu:

defaults write com.apple.Safari WebKitDeveloperExtras -bool true

Uruchamiamy Safari, wchodzimy na jakąś stronę i klikamy na elemencie prawym przyciskiem myszy a następnie wybieramy "skontroluj ten element".

Może komuś się przyda :) Enjoy!

Bluetooth screen locker - czyli blokujemy ekran gdy nie jesteśmy w pobliżu komputera

13 listopada 2008

Wpadłem ostatnio na pewien pomysł - mianowicie często odchodzę od komputera a chciałbym, żeby moje dane zawsze były bezpieczne. Postanowiłem więc jakoś rozwiązać ten problem i stworzyłem szybko malutki skrypcik w Pythonie który sprawdza czy moja komórka jest w zasięgu działania bluetootha w komputerze.

Jedyne co trzeba zrobić to zainstalować lightblue. Program co kilka sekund sprawdza czy istnieje urządzenie o podanym MAC adresie, w przypadku jego braku włącza wygaszacz ekranu.

Zamiast XX:XX:XX:XX:XX:XX wpisujemy MAC naszej komórki.

import os, lightblue, time
screen_command = 'gnome-screensaver-command -a -l' #dla ubuntu
#odkomentuj dla MAC OS X screen_command = '/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine'
lock = 0
while 1==1:
  try:
      lightblue.finddevicename('XX:XX:XX:XX:XX:XX', usecache=False)
  except:
      if lock == 0:
          os.system(screen_command)
          lock = 1
  else:
      lock = 0
  time.sleep(2)

Usuwanie elementów z DOM w IE

16 września 2008

Jeśli ktoś z was próbował kiedyś dodawać elementy(np. tabelaryczne) za pomocą JS a następnie je usuwać w Internet Explorerze - wie, że to koszmar.

IE ma problem przy usuwaniu elementów poprzez pobieranie listy elementów rodzica(childNodes, czy sprawdzaniu firstChild)

Lifehacking - hakujemy kibelek

08 czerwca 2008

Pewnie nie raz każdemu facetowi zdarzyło się, że musiał iść za potrzebą się "odlać" i w tym momencie czasami powstawał pewien problem. Każdy kulturalny mężczyzna podnosi klapkę od kibelka do góry, ale co jeśli ona nie zostaje na swoim miejscu, tylko opada? Nie jest to sytuacja wygodna! Trzeba sobie z tym poradzić :)

SmallGallery v0.3.8

30 marca 2008

Kolejna wersja SmallGallery do ściągnięcia - v0.3.8 :)

Czym jest SmallGallery?
To prosty skrypt galerii pozwalający na poruszanie się po katalogach i przeglądanie zdjęć w nich zawartych. Istnieje również możliwość zgrywania plików do odpowiednich folderów przy pomocy www :)

PingerCast - zobacz o czym piszą Pingerowcy

03 marca 2008

Zauważyłem już jakiś czas temu, że brakuje narzędzia pozwalającego śledzić wpisy z serwisu pinger.pl, które grupowałoby je wg określonych tagów. Postanowiłem więc skorzystać z okazji i stworzyć coś takiego :)

Użytkownik podczas dodawania nowych wpisów do swojego bloga w serwisie pinger.pl, może oznaczyć je odpowiednimi tagami, dzięki którym PingerCast z agreguje odpowiednie treści. PingerCast przechowuje wpisy tylko z ostatnich 48 godzin.

PingerCast połączony został również z PingerMapą - tagi pojawiające się na mapie kierują bezpośrednio do odpowiednich stron PingerCastu.

Całość jest już funkcjonalna, ale w najbliższej przyszłości zamierzam jeszcze poprawić niektóre elementy, aby było jeszcze lepiej :)

Zapraszam do korzystania i będę wdzięczny za wszystkie uwagi dot. działania(również te bardzo krytyczne).

Dla zainteresowanych współpracą: blazej.gruszka [małpka] gmail [kropka] com

PingerMapa - mapa serwisu pinger.pl

07 stycznia 2008

Zawsze chciałem zrobić coś używając Google Maps API. Teraz w końcu jestem w stanie powiedzieć, że coś takiego przy pomocy moich rąk powstało. Padło na serwis pinger.pl, a w połączeniu z mapami Google, szczyptą AJAX'u oraz JS dało PingerMapę. Spytacie co to jest?

PingerMapa jest narzędziem pozwalającym na bieżący podgląd skrótów wpisów(160 znaków) dodawanych przez użytkowników w serwisie pinger.pl, odzwierciedlając tym samym ich faktyczne położenie na mapie świata :)

Stronicowanie w PHP

27 grudnia 2007

Jest wiele możliwości stworzenia stronicowania w PHP. Ja zamierzam przedstawić jedną z nich, która moim zdaniem dobrze nadawać się będzie do użycia np. w różnego rodzaju skryptach galerii nie korzystających z baz danych. Dla nieświadomych, czym jest stronicowanie? - podziałem treści na strony ;)

Wyobraźmy sobie, że stworzyliśmy galerie plików. Pod uwagę wzięliśmy podział na obiekty. Obiektami mogą być pliki graficzne oraz foldery(zawierające inne pliki), oczywiście zawierać mogą one różne właściwości, np. typ, tytuł, url, kategorię, datę utworzenia.

SQL i instrukcja CHECK

09 grudnia 2007

Chciałbym poświęcić kilka słów na temat użycia SQL'a oraz jego instrukcji, które nie są zbyt często opisywane w różnych tutorialach i kursach. Dzisiejszy artykuł będzie pierwszym z cyklu "jak to działa" ;) Aby przetestować przykłady znajdujące się poniżej, musimy zaopatrzyć się w bazę PostgreSQL lub MS SQL.

Wpisy wielojęzykowe na Joggerze - implementacja

13 listopada 2007

Znam kilku Joggerowiczów, którzy dodają swoje wpisy w językach innych niż ojczysty. Tworzą oni tym samym nowe kategorie, w których je umieszczają. Pytanie brzmi, po co, bądź czy nie dałoby się tego rozwiązać w inny, ciekawszy sposób?

Rozwiązanie, które zamierzam przedstawić w całości oparte jest na JavaScript i jQuery.

Debugowanie w Ruby on Rails

04 listopada 2007

Czasami w aplikacjach railsowych zdarzają się błędy które trudno wychwycić gołym okiem, bądź znaleźć w logach. Co wtedy zrobić? Na szczęście programiści Ruby on Rails wymyślili narzędzie, które pomaga debugować aplikację w różnych punktach napisanego przez nas kodu.

Konferencja - "Metody, narzędzia i technologie informatyczne w gospodarce opartej na wiedzy”

27 sierpnia 2007

Katedra Informatyki przy Wyższej Szkole Bankowej w Poznaniu Wydziału Zamiejscowego w Chorzowie zaprasza na ogólnopolską konferencję naukową "Metody, narzędzia i technologie informatyczne w gospodarce opartej na wiedzy", która odbędzie się 26 września 2007

Celem konferencji jest przedstawienie osiągnięć naukowo-badawczych przedstawicieli nauki i praktyki gospodarczej. Organizatorzy mają nadzieję na stworzenie forum dyskusji dla środowiska naukowego i praktyki gospodarczej oraz propagowanie idei współpracy naukowo-badawczej.

SmallGallery v.0.3.5

17 sierpnia 2007

Stało się - dzisiaj światło dzienne ujrzała najnowsza wersja SmallGallery 0.3.5. W najnowszej wersji:

  1. Zmiana systemu szablonów Smarty na OPT(Open Power Template)
  2. Dodanie możliwości wyświetlania miniatur zamiast ikonek
  3. Kilka nowych opcji do zmiany w konfiguracji: GALLERY_TITLE - tutuł naszej galerii, SHOW_THUMBS - wyświetlanie miniaturek, THUMB_MAX_WIDTH i THUMB_MAX_HEIGHT - maksymalna wysokość i szerokość miniaturki, THUMBS_QUALITY - jakość tworzonych miniaturek(od 1 do 100)

Grep w PHP

07 sierpnia 2007

Zastanawialiście się kiedyś jak stworzyć narzędzie grep, tylko że w php? :) Poświęciłem chwilkę czasu i spłodziłem skrypt, dzięki któremu możemy wyszukiwać pliki(w odpowiednich katalogach), o określonym rozszerzeniu, zawierających odpowiednie wzorce(póki co nie oparte jeszcze na wyrażeniach regularnych ;)) Ruszyć powinien u każdego(pisane pod php4). Skrypt jest prosty i nie zawiera takiej funkcjonalności jak linuksowy grep, ale być może przyda się użytkownikom, którzy nie potrzebują zaawansowanych funkcji ;)

Gadżet twitter.com

20 maja 2007

Jakiś czas temu założyłem sobie konto w twitter.com. Chcąc wzbogacić bloga o pewien dodatek oferowany przez wymieniony wyżej serwis(dot. aktualnie wykonywanych przeze mnie czynności), zmuszony byłem zainstalować go w postaci flasha na stronie. Niestety, nie przepadam za "flashowymi bajerami" i tym samym postanowiłem stworzyć coś nowego, co odpowiadałoby moim potrzebom :) Z pomocą przyszło mi API twittera, php oraz JavaScript(prototype, script.aculo.us - pliki: scriptaculous.js, effects.js).

SmallGallery v.0.3

30 kwietnia 2007

Po kilku miesiącach oczekiwania wypuszczam nową wersję SmallGallery v0.3. Co zostało zmienione/poprawione w najnowszej wersji?

Konferencja naukowa - bezpieczeństwo E-biznesu

13 kwietnia 2007

W Wyższej Szkole Bankowej w Poznaniu WZ. w Chorzowie 19 kwietnia 2007 roku odbędzie się konferencja naukowa. Głównym organizatorem jest działające przy uczelni studenckie koło informatyczne WebExpanders. Celem konferencji będzie omówienie szeroko rozumianego bezpieczeństwa E-biznesu.

Tematy które zamierzamy poruszyć, to:

1) "Bezpieczeństwo systemów informatycznych w dużych przedsiębiorstwach"

2) "Zakłady sportowe w internecie"

3) "Bezpieczne programowanie i przegląd najczęściej popełnianych błędów w aplikacjach e-biznesowych (na przykładzie języka PHP)"

Więcej informacji na stronie: www.webexpanders.org

Rusz swoim oknem

21 marca 2007

Wielu z was pewnie nie raz potrzebowało możliwości przesuwania określonych obiektów na stworzonych przez siebie stronach. Jako, że staram się do rozwiązań niektórych problemów dojść sam, stworzyłem prostą bibliotekę, która nam to umożliwi :)

Dodajemy własne logo do lightbox'a

12 marca 2007

Jakiś czas temu znalazłem zlecenie(zlecenia.przez.net) dot. dodania logo dla Lightbox'a v2.0. Nie jestem specjalistą od CSS i JS/DOM, ale rozwiązanie, które zamierzam przedstawić działa(testowane tylko na Firefox 2.0.0.1 :P). Sam proces instalacji Lightboxa ominę, ze względu na fakt, że można znaleźć wiele informacji na ten temat przy pomocy google :) Kiedy Lightbox już działa dokonajmy właściwej instalacji naszego loga ;)

Odporność polskich stron na ataki typu path traversal

05 marca 2007

Ponad tydzień temu postanowiłem sprawdzić odporność polskich stron na atak typu "path traversal" (jest to atak polegający na dostaniu się do pliku lub katalogu na serwerze normalnie niedostępnego) oraz na atak związany z dołączaniem(includowaniem) plików ze stron zewnętrznych. O dziwo jeszcze dziś, kiedy tak wiele mówi się o zabezpieczeniach serwerowych oraz środowiska aplikacji(np. skryptów php), zdarzają się witryny, które wręcz krzyczą "zhakuj mnie". Agresor, dzięki błędom wykorzystującym polecenie include(ew. require) ma możliwość inegerencji w strukturę plików serwera, co w rezultacie może doprowadzić do pobrania pliku /etc/passwd lub podmianę strony głównej witryny. Z praktycznego punktu widzenia programowania skryptów php wystarczy kilka linijek aby zabezpieczyć się przed tego typu błędami.

Kilka informacji o autorze

Programista, blogger, uwielbia białą czekoladę ;)