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.