18 Haziran 2011 Cumartesi

Python Geliştirme Ortamları

--- Bu yazı yeni başlamayı düşünenler içindir ---

Python'a yeni başlıyorum ve windows ortamında geliştirmek istiyorum bana development ortamı için yapmam gerekenleri ve yararlı toollar önerebilir misiniz?

Windows'ta Geliştirme Yapmak


Windows Dert Ortamı

Açıkcası bu soruyu cevaplarken biraz kurgu yaparak konuşacağım zira Windows ortamında pek geliştirme yapmadım. Yaptığım sırada ise yaptığım sadece daha önce geliştirdiğim bir aleti Windows'a port etmeye çalışmaktan ibaretti. Python'un kurulması, bağımlılıkların yerleştirilmesi ve geliştirmeye başlamadan önce gerekli ayarların yapılması hepsi benim için birer çileye dönüştü. Daha sonrasında ise Dos komut isteminde çalışmak, gerektiğinde ssh ile uzak makineye bağlanmak çilenin noktası oldu benim için. Bilmiyorum belki Linux ortamlarına alıştığım içindir ama gerçekten zordu. / Bu konuda yorumlarınızı bekliyorum.

Eğer Bugün Windows Üzerinde Geliştirme Yapacak Olsam;

Bağımlılık kurma meselesini pip Kullanarak çözmeye çalışırdım. Bir kere kurduktan sonra kendisi Python paketleri için kolay bir bağımlılık kurma aracı olarak çalışıyor. Terminalde ya da Dos ortamında,

pip install hede

Diyerek hede pakedinin kurulmasını sağlayabiliyorsunuz. Ancak bazı modüller pip ile uyumsuzlar. Örneğin geçen gün imaj görüntüleme ve düzenleme pakedi olan PIL'i kurmaya çalıştığım zaman çalışmadığını gördüm. Baya bir uğraştan sonra pip kullanırken PIL pakedini direkt olarak kurmamamız gerektiğini, onun yerine Pillow adlı PIL pakedinin uysallaştırılmış bir versiyonunu kurmak gerektiğini öğrendim.

Bunun dışında bazı paketleri yüklerken başka dillerden kütüphaneler derlenip kurulmaya çalışılıyor bu yüzden sistemde GCC'nin kurulu olması gerekli.

Neyse sözü uzatmayayım,

Siz En iyisi Linux Kullanın


Her zaman söylenir, developer olmaya niyetlenmiş kişinin linux kullanması daha iyidir diye. Sebebi basit, ihtiyacınız olan olabilecek bütün tool'lar kütüphaneler sisteme kurulu olarak gelir. Olmayanları da paket yöneticiniz ile kurar geçersiniz. Dos ekranında komut vermektense bir Linux terminalinde komut vermek her zaman daha kolay ve sağlıklıdır.

Linux ortamında geliştirmeye başlamak için size gerekli olan tek şey kendinize bir ide ya da editor seçip çalışmaya başlamanızdır. Linux camiasının iki kallavi editörü var, bunlardan biri emacs, diğeri ise vim. İkisi de çok güçlü araçlar. İkisi için de eklenti geliştiren binlerce insan vardır sanırım. Ancak söz konusu dil Python ise ben PyCharm'ı tek geçerim. İndirip kullanın, hiç bir kısıtlama yok. Sadece deneme süresi geçtikten sonra kendisini yarım saatte bir kapatıyor. Bence iyi bile sayılabilir böyle olması zira ben bazen bilgisayarın başından kalkmayı unutuyorum.

Sanırım soruya cevap vermiş oldum. Bir daha ki yazıda görüşmek üzere esenkalın.

5 Kasım 2009 Perşembe

Appengine'de Mail Api'nin Kullanılışı

Web sayfanızda iletişim bölümünde hazırladığınız bir form olsun ve sonuçlarını mail adresine gelmesini istiyorsunuz o zaman bu yazı size faydalı olabilir. Sıralama şu şekilde, 1.Formunuzu oluşturun, 2.Veritabanı için modelinizi yazın, 3.Formdan geleni işleyin. Öncelikle dosya yapımız;

|----- app.yaml
|----- iletisim.py
|----- model.py
|----- templates
|----------iletisim.html

Şeklindedir. Sıra sıra gitmek istiyorum. Html formumuzu oluşturalım(template/iletisim.html);



*

*



İsim ve soyisim girişi yapıldığında ve "Yolla" tıklandığında bilgilerin mail adresinize gelmesi için bir kaç adım var. Öncelikle modelimizi oluşturan python kodumuzu yazalım ("model.py")


from google.appengine.ext import webapp,db

class Basvuru_(db.Model):
"""
Basvuru yapilacagi zaman kullanilacak olan model
"""
ad = db.StringProperty(verbose_name="ad",required=True)
soyad = db.StringProperty(verbose_name="soyad",required=True)

##Otamatik Form Olusturmasi icin Kullanabilirsiniz
class Basvuru_form(djangoforms.ModelForm):
#Kullanisi
class Meta:
model = Basvuru_
fields = ('ad','soyad')


Modelimizi de olusturduktan sonra formdan gelen veriyi islemeye geldi. Bunun icin iletisim.py python dosyamızı oluşturup işlemlerimizi yapıyoruz.


from google.appengine.ext.webapp import template
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.api import users,mail
from django.shortcuts import render_to_response
import os,sys

class Iletisim(webapp.RequestHandler):
def get(self):

template_values={}
path = os.path.join(os.path.dirname(__file__), 'templates/iletisim.html')
self.response.out.write(template.render(path, template_values))

def post(self):
veri = Basvuru_form() #Bos girilip girilmedigini kontrol eder
if not veri.is_valid():
ad = up(unicode(self.request.POST["ad"]).encode("utf-8"))
soyad = up(unicode(self.request.POST["soyad"]).encode("utf-8"))
#TURKCE YAP
if ad and soyad: # isim ve soyisim girilmemisse formu kaydetmez
kayit = Basvuru_(ad=ad,soyad=soyad)
kayit.put()

if not mail.is_email_valid(ad): #eger isim yazmamissa size mail atmaz
pass
else:
sender_address = "yetis.m@gmail.com"
yollanan_adres="yetis.m@gmail.com,bilgi@spssanaliz.net"
subject = "Birisi Formu Doldurdu"
body ="\nAd Soyad : "+ad+" "+soyad+"formunuzu doldurdu."
mail.send_mail(sender_address,yollanan_adres, subject, body)
self.redirect("/ulasildi")#Burada form yollama basarili oldugunu gösteren bir mesaj verdirebilirsiniz.
else:
self.response.out.write("Bilgileri eksik girdiniz lütfen tekrar deneyiniz!!!iletisim")
else:
self.redirect("/hata")
application = webapp.WSGIApplication(
[
('/iletisim',Iletisim),
], debug=True)


Bunlara ek olarak dikkatinizi çekmiştir. "up" fonksiyonu kullanılmış, Türkçe karakter sorununu kaldırmak üzere bir arkadaşımdan bulduğum fonksiyonu kullanabilirsiniz. İşinizi oldukça göreceğini düşünüyorum ki sadece python'da değil, hangi dilde olursa olsun bu mantık ile Türkçe karakter problemlerini ortadan kaldırabilirsiniz. Eğer Türkçe karakter (ı,ğ,ü,ş,İ,ö,ç vb..)girilmiş ise büyük harfe çevip bu karakterlerden arındırıyor. Fonksiyonumuz;


def up(text):
"""Girilen TR karakterleri EN karakterlere cevirir"""
groupone = ["a", "b", "c", "\xc3\xa7", "\xc3\x87", "d", "e", "f", "g", \
"\xc4\x9f", "\xc4\x9e", "h", "\xc4\xb1", "i", "\xc4\xb0", \
"j", "k", "l", "m", "n", "o", "\xc3\xb6", "\xc3\x96", "p", \
"q", "r", "s", "\xc5\x9f", "\xc5\x9e", "t", "u", "\xc3\xbc", \
"\xc3\x9c", "v", "w", "x", "y", "z",\
"\xfe","\xde","\xfd","\xdd","\xf0","\xd0","\xfc","\xdc","\xf6","\xd6","\xe7","\xc7",\
"\u015f"]

grouptwo = ["A", "B", "C", "C", "C", "D", "E", "F", "G", "G", "G", "H", \
"I", "I", "I", "J", "K", "L", "M", "N", "O", "O", "O", "P", \
"Q", "R", "S", "S", "S", "T", "U", "U", "U", "V", "W", "X", \
"Y", "Z",\
"S","S","I","I","G","G","U","U","O","O","C","C",\
"S"]
for counter in range(len(groupone)):
text = text.replace(groupone[counter], grouptwo[counter])
return text


Uzun zamandır blogumuzda yazı göremiyorum. Eskiden zevkle okuyordum. Bu yazı benim 20 dakikamı aldı. Özellikle uzak sunucu işlemleri için yazıları çok merak ediyorum ve jquery,ajax,python üclüsünü kullanacak örneklerde sizlerden beklemekteyim.

3 Eylül 2009 Perşembe

Django'da iki sunucuda birden çalışmak ve settings.py

Şu sıralar uğraştığım bir Django uygulaması var geliştirirken karşılaştığım bir sorunu ve çözümünü paylaşayım dedim.

Geliştirdiğim uygulamayı sunucuya yükledikten sonra lokalde geliştirirken oluşturduğum bir çok seçeneğin sunucudayken değişmesi gerektiğini farkettim. Bu ayarları değiştirmek kolaydı fakat sıkıntı çektiğim nokta uygulamanın hem sunucuda hemde kendi laptopumda tek bir settings.py ile sorunsuzca çalışması gerekiyordu. Bende şöyle bir çözüm buldum :

settings.py :

from os import uname, getcwd
from os.path import join
MACHINE_NAME = uname()[1]
if MACHINE_NAME == "web77.webfaction.com":
DOCUMENT_ROOT = "/path/to/document/"
DATABASE_ENGINE = ...
DATABASE_NAME = ...
DATABASE_USER = ...
DATABASE_PASSWORD = ...
DATABASE_HOST = ...
DATABASE_PORT = ...
else:
DOCUMENT_ROOT = getcwd()
DATABASE_ENGINE = 'sqlite3'
DATABASE_NAME = join(DOCUMENT_ROOT,'sqlite3.db')
DATABASE_USER = ''
DATABASE_PASSWORD = ''
DATABASE_HOST = ''
DATABASE_PORT = ''