Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more
Download
Standard view
Full view
of .
Save to My Library
Look up keyword
Like this
18Activity
0 of .
Results for:
No results containing your search query
P. 1
Python kontra PHP

Python kontra PHP

Ratings:

4.92

(13)
|Views: 6,780 |Likes:
Published by dsoul
python vs. php
python vs. php

More info:

Published by: dsoul on Jul 03, 2007
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

01/01/2013

pdf

text

original

 
04/2007
 Technikę
28
W
królestwo PHP zaczynają wkra-czać inne języki oferując kon-kurencyjne rozwiązania, które to omówimy w tym artykule. Cytując wiki-pedię Python jest interpretowanym, interak- tywnym językiem programowania stworzo-nym przez Guido van Rossuma w 1990 ro-ku. Rozwijany jest jako projekt
Open Source
,zarządzany przez niedochodową
Python So-  ftware Foundation
. PHP to wykonywany postronie serwera skryptowy język programo-wania służący do generowania stron inter-netowych. Python tak samo jak
Ruby
samz siebie nie jest przystosowany do tworzeniastron www, jako że jest to język uniwersal-ny od początku swojego istnienia. PHP nato-miast od początku tworzony był jako językdo tworzenia stron www. W niniejszym ar- tykule skupimy się nie tyle na porównaniu języków, ale frameworków napisanych w Py- thonie i PHP.
Różnice i podobieństwa
Oba języki mają wiele wspólnego, ponieważ są:• Interpretowalnymi językami wysokiegopoziomu z dynamicznym systemem ty-pów;Rozwijane jako projekty OpenSource;Posiadają duże społeczności;Łatwe w nauce (w porównaniu do np. Javy);Łatwe do rozszerzenia poprzez C/C++;Działają na wielu platformach i architek- turach.Mimo podobieństw są to dwa różne języki.Zbiór różnic przedstawia Tabela 1.Nie ulega wątpliwości, że PHP jest popular-ny i ma bardzo dużą społeczność, również wPolsce. Znalezienie pomocy, czy to w postaciopublikowanych materiałów, czy też w posta-ci forum dyskusyjnego to nie problem. Rów-nież praktycznie każdy darmowy, tani ho-sting będzie zawierał w ofercie obsługę skryp- tów PHP.Python ma mniejszą społeczność, w Pol-sce jest raczej mało popularny, lecz w skaliświatowej społeczność jest dość duża i sku-piona wokół mniejszej ilości serwisów i orga-nizacji. W kwestii hostingu umożliwiające-go obsługę aplikacji
 Zope
,
Django
czy
Pylons
 nie będziemy mieć licznego grona kandyda- tów, lecz jakość usług będzie wysoka (np.
WebFaction
). Skrypty PHP wystarczy umie-ścić na serwerze, korzystając np. z klien- ta FTP. W przypadku aplikacji wspomnia-nych frameworków praktycznie nieodzow-ny będzie dostęp do
shella
oraz odpowied-nia konfiguracja serwera www. Framewor-ki Pythonowe nie nadają się więc jako „Mo- ja pierwsza strona”.Kolejnym punktem, który warto poruszyć to wsteczna zgodność Pythona. Aplikacja pi-sana pod Pythonem 2.5 będzie w stanie dzia-łać pod Pythonem 2.3. Potencjalne zmiany wkodzie ograniczą się do zmian nazw modu-łów czy sposobu ich użytkowania (chyba żeużyjemy „starszej” nazwy modułu). W przy-padku PHP jest jeden problem. PHP5 udo-stępniło programistom wiele dobrych roz-wiązań, które zostały wykorzystane w wie-lu projektach.Niestety na większości kont hostingowychwciąż dominuje PHP4. Wydanie PHP6 jesz-cze bardziej spotęguje to zjawisko, a progra-miści oprócz wykonania swojej pracy będąmusieli co chwilę uwzględniać wersję PHP,pod którą ma działać ich aplikacja.
Python dla programisty PHP
Programista PHP dość szybko może połapaćsię w konkurencyjnym języku, choć będziemusiał przyzwyczaić się do pewnych różnic.Pierwszą jest brak średnika na końcu linii,drugą grupowanie kodu za pomocą wcięć. Pę- tla for w PHP wygląda znajomo:
<?PHPfor($i=1;$i <=5;$i++){print $i.'<br />';}?>
W Pythonie wyglądać może tak:
for i in range(1,6):print i
Nieco większą różnicą jest brak tablic zna-nych z PHP, a obecność list, tupli i dzienni-ków. Pierwsze dwa typy uznać można za tabli-ce numeryczne, a dzienniki za tablice asocja-cyjne. Oto przykład:
dziennik = {'klucz': 'wartosc'}print dziennik['klucz']lista = ['element1', 'element2']print lista[1]print lista[0]tupla = ['element tupli1', 'elementtupli2']for i in tupla:print i
Python kontra PHP
 Trend web 2.0 przyniósł ze sobą nie tylko nowe podejście do tworzeniastron internetowych, ale również nowe technologie i narzędzia. Wielu z nassłyszało lub miało kontakt z Ruby on Rails, a użytkownicy portalu grono.netkorzystali z aplikacji napisanej w Django.
Dowiesz się...
• Zapoznasz się z nowymi narzędziami do two-rzenia stron www.
Powinieneś wiedzieć...
Podstawowa znajomość PHP i wzorca MVC.
Poziom trudności
czyli węże i słonie
 
Python kontra PHP
www.phpsolmag.org
29
Nowością będzie przestrzeń nazw i importo-wanie modułów. W przypadku PHP w skryp-cie mamy dostęp do wszystkich funkcji i klasdanej instalacji PHP. W przypadku Pythonaby uzyskać dostęp np. do klas obsługującychpliki
 ZIP 
musimy zaimportować odpowied-ni moduł:
import ziplez = ziple.ZipFile("plik.zip", "r")for plik in z.namelist():print 'Plik: ', plik,bajty = z.read(plik)print 'ma', len(bajty), 'bajtow'
Wydajność i skalowalność
Oba języki są interpretowane (do wykonaniaskryptu używa się interpretera), lecz PHP nie jest kompilowany do bajtkodu i zapisywanydo wielokrotnego użytku. Każde żądanie wy-słane do serwera spowoduje zinterpretowaniei wykonanie kodu w locie. W przypadku Py- thona kompilacja do bajtkodu jest automa- tyczna, natomiast użytkownicy PHP musząskorzystać z kompilatorów nie wchodzącychw skład domyślnej dystrybucji PHP, takich jak
Xcache
,
eaccelerator 
,
 APC
czy produktówfirmy
Zend 
. W bezpośrednim starciu bez za-biegów optymalizacyjnych Python wygra,lecz odpowiednio skonfigurowane PHP niebędzie miało się czego wstydzić.Python i niektóre jego frameworki mo-gą działać wielowątkowo, co jest wydajniej-sze od zwykłego trybu pracy PHP, jako że ta-ki tryb pracy zużywa mniej zasobów. Rów-nież w przypadku
Django
czy
Pylons
może-my skorzystać z różnych sposobów hostowa-nia aplikacji – dla
 Apache
mamy
mod_python
 i
mod_fcgid
, dla
 Lighttpd 
,
Cherokee
czy
 Nginx 
możemy wykorzystać protokół
FastC- GI 
lub
SCGI 
.Za chwilę poznamy bliżej framework
Django
.W jego przypadku dodanie keszowania dla całe-go projektu, to dodanie jednego wiersza w usta-wieniach, a do keszowania możemy użyć m.in.
memcache
– wydajnego systemu bazującego napamięci
RAM 
.Stosując Pythona do tworzenia dynamicz-nych stron www, na pewno nie stracimy na wy-dajności gotowych aplikacji, a nawet dość częstonawet zyskamy.
Frameworki Pythona
W Pythonie znajdziemy kilka (a nie kil-kadziesiąt i więcej) frameworków do two-rzenia stron www, które można wykorzy-stać. Prym wiedzie
Django
i
Pylons
, a trze-ci
TurboGears
znajduje się obecnie w fa-zie przejściowej między starą i stabilną se-rią 1.X a przygotowywaną serią 2.X zgodnąz
WSGI.
Dobrze znane od dawna
 Zope
i
Plo- ne
też ewoluują, lecz to
Pylons
i
Django
podsztandarem nowoczesności i
web 2.0
ataku- ją układ
 LAMP 
.
Django
to framework dla „profesjonalistów z terminami”, jak głosi jego motto. Jest to dobrzezintegrowany zestaw własnych komponentów takich jak
ORM 
wysokiego poziomu, systemszablonów czy mapper adresów URL.
Pylons
  to framework bazujący na integracji „najlep-szych ze swojego rodzaju” rozwiązań.Wykorzystuje on istniejące podzespoły jakrównież umożliwia łatwą ich wymianę, takwięc nie jesteśmy ograniczani do np. jedne-go systemu szablonów. Krótkie porównanieprzedstawia Tabela 2.Oba frameworki są bardzo dobrymi rozwią-zaniami.
Django
jest frameworkiem najlepiejpasującym do aplikacji typu CMS.
Pylons
mapodejście „zrób to sam” i króluje w przypad-kach, gdy wymagamy elastyczności i stawiamynietypowe wymagania.Portale takie jak
Grono.net 
i
lawrence.com
 wykonane są w
Django
– i są dużymi serwisa-mi internetowymi.
Poradnikzdrowie.pl 
to ser-wis napisany w
Pylons
zintegrowany z
RedDo- tem
(istniejącą wcześniej strukturą serwisówwłaściciela). Serwisy te dobrze obrazują różni-ce między
Django
a
Pylons
.
WSGI
WSGI czyli
Web Server Gateway Interface
tostandard interfejsu aplikacji napisanej w Py- thonie do porozumiewania się z serwerami.Stworzono standard interfejsu, który obec-nie stosowany jest przez wiele pythonowychaplikacji, głównie frameworków i aplikacjisieciowych.Przestrzeganie standardu ułatwiło współ-pracę wielu aplikacji ze sobą i z serwera-mi – pojawiło się pojęcie
middleware
, czyliskryptu o określonym interfejsie, modyfiku- jącym żądanie bądź odpowiedź wysyłaną dolub z serwera.Dany skrypt
middleware
może być bez mo-dyfikacji stosowany w każdym frameworku,zgodnym z wytycznymi WSGI, co stanowiogromne pole do rozbudowy narzędzi tego typu o nowe możliwości. Przykładem jest tuframework
Pylons
stawiający na
WSGI 
. Samnie posiada ani systemu użytkowników, ani
 Tabela 1.
Różnice pomiędzy językami PHP i Python
PHPPython
Składnia bazująca na C i PerluWcięcia stosowane do grupowania koduInstrukcje
 swith
i
do... while
Przestrzenie nazwBrak przestrzeni nazwWszystko jest referencjąNawiasy klamrowe stosowane do grupowania koduWielowątkowośćWiększa społeczność i popularnośćDużo typów wysokiego poziomu Język głównie do tworzenia dynamicznych stronJęzyk ogólnego użytkuStabilny, lecz gwałtowniej rozwijany (PHP4 – PHP5)Wstecznie zgodny, stabilny i dojrzały. Standaryzacja rozwiązańKompilatory dostępne jako rozszerzenia (APC, Xcache, eaccelerator, zend)Automatyczne kompilowanie do bajtkodu
 Tabela 2.
Porównanie frameworków Pythona
DjangoPylons
Dobrze zintegrowane własne komponentyIntegruje najlepsze istniejące komponenty i umożliwia ich łatwą wymianęŁatwy w nauce, świetnie udokumentowanyNiespójna i mniej liczna dokumentacja (każdy komponent ma dokumenta-cję na swojej stronie). Wymaga więcej czasu na naukę i konfigurację kom-ponentówORM wysokiego poziomu obsługujący MySQL,SQLite i PostgreSQL (Oracle od wersji 1.0)Zalecane stosowanie ORMa SQLAlchemy – większe możliwości i łatwiejszapraca na istniejących tabelach, lecz trudniejszy w nauce.Większa społeczność, zastosowany w wielu projektachAplikacja może działać wielowątkowoGeneryczne widoki, Automatyczny panel admina, system użytkowników iuprawnieńWiele pomocników JavaSript, Ajax (w tym Scriptaculous)
 
04/2007
 Technikę
30
obsługi
openID
, ale middleware, takie jak np.
 AuthKit 
, bezproblemowo dodają te funkcjo-nalności do frameworka. Chęć przestrzega-nia specyfikacji jest w społeczności tak du-ża, że trzeci duży framework –
TurboGears
zawiesił rozwój dotychczasowego niezgodne-go z
WSGI 
drzewa 1.X tworząc zarazem roz-wojową obecnie gałąź 2.X, zgodną z
WSGI 
.Dla programistów rozwijających framewor-ka oznacza to przepisanie wielu modułów
TurboGears
.W PHP standaryzacja rozwiązań kuleje. Na-wet na poziomie nazw funkcji trafimy na róż-ne style nazewnictwa. W kategorii komponen- tów sprawę nieco wyjaśnia
PEAR
, lecz czy
Co- deIgniter 
,
Symfony
lub
 Zend Framework
bez-boleśnie integrują
API 
pakietów
PEAR
? Nie-stety nie.
 Zend Framework
i
ezComponents
jako zbiórluźniejszych komponentów, które łatwiej wy-korzystywać w innych frameworkach, dają na-dzieję, lecz na tak daleko posuniętą standary-zację jak w przypadku Pythona nie mamy narazie co liczyć.
Django kontraCodeIgniter i spółka
Zajmiemy się teraz porównaniem obu frame-worków, jak i drogi tworzenia aplikacji z ichużyciem (
CodeIgniter opisany został w nume- rze 2/2007 phpSolutions
).
Django
wykorzystujewzorzec MVC , lecz w porównaniu z CI wpro-wadza kilka zmian. Pierwszą z nich jest nazwa– MTV czyli
 Model-Template-View
. W
Django
 model określa strukturę tabeli (logikę bazoda-nową ogólnie), widok zawiera logikę aplikacji,a szablon wygląd. Kolejna różnica dotyczy sa-mego modelu. W przypadku
CodeIgnitera
mo-del zawierał definicje różnych operacji na ba-zie danych, takich jak pobieranie ostatnichnewsów, kasowanie i aktualizowanie wpisów.W
Django
model definiuje strukturę tabeli, aoperacje wykonujemy w widokach za pomo-
ORMa
.
Przykładowy projekt Django
Zaprezentuję teraz prosty projekt
Django
– blogz systemem newsów obrazujący sposób tworze-nia projektów
Django
.
Instalacja
Ostatnią wydaną wersją
Django
jest wersja0.96. Pobieramy archiwum z frameworkiem zestrony projektu i rozpakowujemy. Otwieramykonsolę i przechodzimy do katalogu z kodem
Django
. Wydajemy polecenie:
python setup.py install
Django
wymaga kilku dodatkowych bibliotekPythona:Do obsługi
SQLite Django
używa
 pysqlite
;
Postgres: psycopg 
;• MySQL:
mysql-python
.
 Tworzenie aplikacji w Django
Tworzenie projektu. Projekt składa się z aplika-cji, np. CMS z różnych modułów. By stworzyćprojekt wystarczy wydać polecenie:
django-admin.py startproject NAZWA_PROJEKTUdjango-admin.py startproject blog
Stworzone zostaną podstawowe pliki projek- tu, możemy nawet uruchomić serwer
Django
 dla tego projektu.
Uruchamianie serwera Django
Z konsoli po przejściu do katalogu projektu wy-konaj polecenie:
python manage.py runserver 8080
Komenda ta uruchomi deweloperski serwer
Django
. Będzie on dostępny pod adresem
http: //localhost:8080/ 
.
Konfiguracja projektu – bazy danych
Django
jest silnie powiązane z bazami danychi do dalszych operacji będzie nam potrzeb-na dostępna baza danych (
sqlite3
,
mysql 
lub
  postgresql 
). Edytujemy
settings.py
i ustawia-my SQLite jako naszą bazę danych: patrz Li-sting 1.Teraz zatrzymujemy serwer
Django
i syn-chronizujemy bazę danych. Po dodaniu nowejaplikacji, bądź danych do bazy danych nowe-go projektu, musimy te dane zsynchronizować.Służy do tego polecenie:
python manage.py syncdb
W przypadku rozpoczynania pracy z bazą da-nych
Django
zapyta nas też o dane głównegoadmina projektu.
 Tworzenie aplikacji
By stworzyć aplikację wystarczy wykonać pole-cenie z katalogu projektu:
python manage.py startappNAZWA_APLIKACJIpython manage.py startapp news
Listing 1.
Podłączenie bazy danych do naszego CMSa
DATABASE_ENGINE ='sqlite3' # 'postgresql', 'mysql', 'sqlite3'lub'ado_mssql'. DATABASE_NAME ='bazka.db' #nazwa bazy danych lubścieżka dla bazy sqlite3 DATABASE_USER ='' #użytkownik bazy,puste dla sqlite3 DATABASE_PASSWORD ='' #hasło użytkownika,puste dla sqlite3 DATABASE_HOST ='' #host 
do
 bazy danych,puste localhost DATABASE_PORT ='' #Podaj port jeżeli niestandardowy,puste dla sqlite3. następnie zmieniamy język i strefęczasową: TIME_ZONE ='Europe/Warsaw' LANGUAGE_CODE ='pl'
Listing 2.
Model aplikacji wiadomości
from django.db import models
class
 News(models.Model):  news_title = models.CharField(  maxlength=255,verbose_name='Tytuł')  news_text = models.TextField(  verbose_name='Treść')  news_date = models.DateTimeField(  auto_now_add = 
True
,blank= 
True
,verbose_name='Data dodania')  
class
 Meta: verbose_name = "Wiadomość"  verbose_name_plural = "Wiadomości"  
class
 Admin: list_display = ('news_title', 'news_date')  list_lter = ['news_date']  search_elds = ['news_title', 'news_text']  date_hierarchy ='news_date'  def __str__(self):  
return
 self.news_title

Activity (18)

You've already reviewed this. Edit your review.
1 hundred reads
1 thousand reads
Josferba liked this
Dariusz Tutaj liked this
janekkru liked this
Georges Liadis liked this
wilkolaski liked this

You're Reading a Free Preview

Download
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->