słów kilka o django

ePub czas dodania: 2013:02:23 23:20 komentarzy 0
Krótka ilustracja django

Django jest potężnym frameworkiem, który jest naszpikowany wewnętrznymi i automatycznymi mechanizmami zabezpieczenia, walidacji poprawności wprowadzanych danych, kontroli dostępu do tych danych, posiadających setki usprawnień dla dużych obciążeń, spójności danych itp.
    
Weźmy taki prosty przykład. Wyobraźmy sobie, że mamy trzy funkcje: jedna pokazuje artykuł, druga pokazuje stronę kategorii, a trzecia pokazuje prywatne wiadomości.

def show_article(request, id):
    ....
    ....

def show_category(request, id):
    ....
    ....


def show_private_message(request, id):
    ....
    ....

I chcemy, aby prywatne wiadomości pokazywały się tylko zalogowanym użytkownikom. Nic prostszego. Wyciągamy dołączony dekorator @login_required i nad tą trzecią funkcją wystarczy umieścić ten zapis:


@login_required
def show_private_message(request, id):
    ....
    ....


I w tym momencie to sam silnik frameworka pilnuje, żeby tę funkcję mógł odpalić zalogowany użytkownik. Jak jest niezalogowany, to pokaże mu zamiast tego stronę logowania, a tę stronę po zalogowaniu. Właśnie to co jest genialne w pythonie, to użycie tych dekoratorów w taki sposób, przez co kod jest pewny, jest czytelny, pisze się w tym szybko i sprawnie. Ile trzeba sie namęczyć w php, żeby daną funkcę odpalić tylko zalogowanym użytkownikom? Pisania jest na pewno więcej.

Django automatycznie pilnuje wszelkie formularze. Jeśli w modelu wprowadzimy taki zapis:

class Friend(models.Model):
    user = models.ForeignKey(User, verbose_name='użytkownik', null=True, blank=True)
    name = models.CharField(max_length=32, verbose_name='imię i nazwisko')
    age = models.IntegerField(verbose_name='wiek')
    email = models.EmailField(max_length=128, verbose_name=_('E-mail'), blank=True)
    add_time = models.DateTimeField(auto_now_add=True, verbose_name=_('add time'))
    is_alive= models.BooleanField(default=True, verbose_name='czy żyje')
    sex = models.PositiveSmallIntegerField(choices=((1, 'Mężczyzna'), (2, 'Kobieta')), verbose_name=_('płeć'))

    
a w adminie wprowadzimy w najprostszym przypadku
    
class FriendAdmin(ModelAdmin):
    pass

admin.site.register(Friend, FriendAdmin)

To mamy automatycznie zbudowany panel do wprowadzania danych. Panel ten automatycznie pilnuje, żeby email był poprawnym e-mailem, a nie stroną www, żeby wszystkie pola, które nie mają parametru blank=True byly wymagane, żeby wiek był liczbą, a nie jakimś wstrzykniętym kodem sql-injection. Automatycznie doda również datę dodania rekordu (pole add_time). Panel automatycznie zaciąga użytkowników i pokazuje w polu danego użytkownika do wyboru i pllnuje, aby podana liczba w tym panelu była poprawna. W php trzeba wszystkiego samodzielnie pilnować.
    
Jeśli rozbudujemy tego admina w bardzo prosty sposób:


class FriendAdmin(ModelAdmin):
    exclude = ['user']

    def save_model(self, request, obj, form, change):
        if not change: #jeśli nowy rekord
            obj.user = request.user
        obj.save()

    def queryset(self, request):
        return super(FriendAdmin, self).queryset(request).filter(user=request.user)

    def has_delete_permission(self, request, obj=None):
        if obj.user == request.user:
            return True
        return False
    
    def has_change_permission(self, request, obj=None):
        if obj.user == request.user:
            return True
        return False

To mamy automatycznie zrobione zabezpieczenia polegające na tym, że:
1. Podczas dodania rekordu automatycznie ustawi właściciela na zalogowanego użytkownika
2. użytkownik może wyświetlić tylko swoich znajomych (funkcja queryset filtruje tylko tych, którzy mają takiego usera w bazie, jak zalogowany użytkownik)
3. Użytkownik może usunąć tylko swojego znajomego (has_delete_permission zwróci true tylko wtedy, jeśli właściciel rekordu jest ten sam, co zalogowany użytkownik). Tak samo ze zmianą.
        
Wszystko w ten sposób jest kontrolowane przez podkład djangowy.
Dzięki temu kod jest przejrzysty, kontrolowany przez na prawdę świetne mechanizmy zabezpieczeń, łatwy do utrzymania, łatwy do zrozumienia itp. Spróbuj napisać coś podobego w php, to zobaczysz ile się napiszesz, a jak nie jesteś biegły w temacie, to być może wynajdę Ci kupę błędów bezpieczeństwa.
    
Te przykłady są bardzo uproszczone, w rzeczywistości jest tam odrobinkę więcej kodu, ale chciałem zobrazować samą koncepcję. Można na ten temat pisać długo... Ale na prawdę chłopaki, nie wchodźcie w php, bo strach w ogóle w tym się babrać...

Tagi

licznik: 9780 + 1 / 0 - promuj
captcha
x

Zgłoszenie komentarza

dodaj komentarz

x
komentarzy: 0 kolejność: wg punktacji najstarsze najnowsze
@autor 0|0
>Spróbuj napisać coś podobego w php,

Dlaczego upierasz się porównywać siodło z koniem pociągowym? Django to nie jest język programowania. To framework.

Więc jak chcesz Django do czegoś porównać, porównuj do FRAMEWORKÓW na PHP. Porównywanie frameworku na Pythona do czystego PHP to piramidalna bzdura.

Weź na warsztat Zend, Symfony czy inny popularny framework do PHP i wtedy cwaniakuj.
2013-02-24 00:54
Django 0|0
Pewien jestem, że wiesz, ze Django pochodzi od Django Reinharda, uznawanego za najlepszego gitarzystę na swiecie.
http://en.wikipedia.org/wiki/Django_Reinhardt

ZNACZY SIĘ GITARĘ TEŻ MUSISZ LUBIĆ
2013-09-14 11:55
# @jazgdyni 2013-09-14 11:55 0|0
Tak, wiem o tym - napisałem to w swoim panelu bocznym z prawej strony :)

No bingo :) to prawda, lubię gitarę, ale to, że pracuję na frameworku django to raczej zbieg okoliczności :) No i faktem jest, że jest on przez wielu uważany za jednego z najlepszych gitarzystów, ale mi osobiście jakoś nie podchodzi. Po stokroć bardziej mi się podoba, to co zrobili z jego kawałkiem chłopaki z Losdesperados (widać w prawym bocznym panelu).
2013-09-14 14:44
# @Obsługa techniczna 2013-09-14 14:44 0|0
Ja z kolei idę w stronę elektroniki i po Hendrixsie, za najlepszego uważam Satrianiego, Vai jest za techniczny, Steve Ray Vaughan po prostu cudowny.

http://youtu.be/NU0MF8pwktg
2013-09-14 16:20
# @jazgdyni 2013-09-14 16:20 0|0
No ja najbardziej z tego towarzystwa to lubię Tommiego Emmanuela...


http://www.youtube.com/watch?v=wGAIhYokT_Y


http://www.youtube.com/watch?v=HYerZFj9vQQ


A Stevie Ray Vaughan - To też jak najbardziej. Szczególnie dobrze go zapamiętałem, jak grał w wersji unplugged na przemian z... Satrianim :)

Część 1:

http://www.youtube.com/watch?v=mrX6LFeU-XY

Część 2:

http://www.youtube.com/watch?v=-w-LsWzWoh8

2013-09-15 01:11