Kategori: Web Programlama
Aşağıda yazdığım hazır şablon AJAX post işlemlerinizi kolayca yapabilmeniz içindir. Form elementlerini ve formun post edileceği kısmı değiştirdikten sonra sayfa yenilemesi olmadan form yollama ve sonucu sonuç alanına yazdırma için kolayca kullanabilirsiniz.
Bazen excel’deki formüllerin yetmediği durumlar olabilir. Mesela içiçe 5 eğer fonksiyonu veya karmaşık matematiksel hesaplamalar gibi. Bu durumlarda excel makrolarını kullanabilirsiniz.
Aşağıdaki ekte bulunan makro bundan evvel şu makalede anlattığımız python ile yaptığımız parasal değere karşılık risk analizi yapan formülasyonun excel makrosu dili (VBA) ile yazılmış halidir.
Şu adresten indirip makro alanına import edebilirsiniz.
https://docs.google.com/open?id=0B2QbjSFSlgaMX2NJWkU2U0dhT28
Makro kaynak kodları ise şöyle:
Sub VeriKontrol()
‘For dongumuzu acalim
For i = 1 To 99
‘Parasal degerimizi tanimliyoruz
Dim parasal_deger As Long
‘Sonra bu degere A1,A2,A3… hucremizden aldigimiz degeri atiyoruz her seferinde
parasal_deger = Range(“A” & i)
‘Parasal degerimizi checkediyoruz.
‘Bunun icin parasal degeri x sayalim
Dim x As Long
x = parasal_deger
‘Risk degerimizi varsayian olarak 0 atayalim
Dim risk As Integer
risk = 0
‘If blogumuz pythondaki : yerine Then ve sonda Endif kullandik
If x > 10000 And x
risk = 1
ElseIf x > 100000 And x
risk = 2
ElseIf x > 500000 And x
risk = 3
ElseIf x > 1000000 And x
risk = 4
ElseIf x > 2000000 Then
risk = 5
Else:
risk = 0
End If
‘Simdi hesaplanan risk degerimizi B sutunumuza siraliyoruz
Range(“B” & i) = risk
‘For dongumuzu guzel guzel next ile devam ettiryoruz
Next i
End Sub
Python üzerinden Excel dosyalarına erişim sağlayarak içindeki verileri alıp işlemek ve daha sonrasında bu verileri excel dosyasına yazdırmak pratik bir çözüm olabilir. Çünkü bazen exceldeki formüllerle aşılamayacak durumları oluyor. Bu durumlarda büyük miktardaki verileri python ile işlemek büyük kolaylık sağlıyor. Bu iş için excel dosyası ile okuma operasyonlarında xlrd ve yazma operasyonlarında xlwt kütüphanelerini kullanacağız.
Aşağıdaki hazırladığım örnek risk.xls dosyası içindeki parasal değerleri alıp, risk değerli olarak 1 ila 5 arasındaki değerleri atıyor. Sonra bu sonuçları output-risk.xls dosyasına yazdırıyor.
İşte kodlar:
# -*- coding: utf-8-*-
import xlrd
import xlwt
#read
“”“
tek satira kaydedilmiş proje parasal degerlerini check edip
risk degerlendirmesi yapar 1 ila 5 arasindaki risk puanlarini bulur.
output-risk.xls dosyasina parasal degerler ve karsilik gelen risk degerlerini yazar
”“”
class DataController:
def data_risk_test(self,parasal_deger=0):
x=parasal_deger
if (x>10000)&(x
risk=1
elif(x>100000)&(x
risk=2
elif(x>500000)&(x
risk=3
elif(x>1000000)&(x
risk=4
elif(x>2000000):
risk=5
else:
risk=0
return risk
def risk_test(self):
okuwb = xlrd.open_workbook(‘risk.xls’)
okuwb.sheet_names()
okuhucre = okuwb.sheet_by_index(0)
okuhucre = okuwb.sheet_by_name(u’Sheet1’)
#write
yazwb = xlwt.Workbook()
yazhucre = yazwb.add_sheet(‘Otomatik1’)
risk=0
i=0
for rownum in range(okuhucre.nrows):
#print sh.row_values(rownum)
VAL=okuhucre.row_values(rownum)
x=VAL[0]
risk=self.data_risk_test(x)
#print str(x)+“:”+str(risk)
yazhucre.write(i,0,x)
yazhucre.write(i,1,risk)
i=i+1
yazwb.save(“output-risk.xls”)
print “**Risk kontrolleri yapilarak output-risk.xls dosyasina islendi”
#**********************
dc=DataController()
dc.risk_test()
#———————————————-
Bu kodları aşağıdaki linkten indirebilirsiniz:
https://docs.google.com/open?id=0B2QbjSFSlgaMemZqSnl2T1BtOVE
Aynı işi Makro (Excel VBA) ile yapmak isterseniz şu makaleme bakın:
http://blog.suatatan.com/2012/06/excel-makrolar-icinde-gelismis.html
Aynı işi Google App Script ile yapmak isterseniz şu makaleme bakın:
http://blog.suatatan.com/2012/06/google-app-script-ile-tablo.html
Bundan önceki yazımızda kendiliğinden kaymayan yanlızca kullanıcı sayıların üzerine gelince kayan bir “kayar haber” scripti hazırlamıştık. Şimdi ise sitesini hazırladığım bir arkadaşımızın talebi üzerine, çoğu haber sitesinde olduğu gibi kullanıcı karışmasa dahi kendiliğinden kayma efekti veriyoruz.
<!-- This script aims teaching a simple news slider application By Suat ATAN suatatan.wordpress.com All rights reserved Basit bir jquery haber akış uygulaması-otomatik akış da dahil edildi Her hakkı saklıdır --> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Suat ATAN's Simple News Slider</title> <!--JQUERY--> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript"> google.load("jquery", "1.4.2"); </script> <!--OUR SCRIPT--> <script type="text/javascript"> $(document).ready(function() { /*HUMAN INTERACT*/ $(".slide").not(":first").hide(); $(".slide-hook").mouseover(function() { var index = $(".slide-hook").index(this); $(".slide").hide(); $(".slide:eq(" + index + ")").show(); $(".slide-hook").css("color", "black"); $(this).css("color", "red"); }); /*AUTOSCROLL*/ var timer = setInterval(rotate, 4000); }); //dr function rotate() { var cur_slide = $(".slide:visible"); var ls_slide = $(".slide:last"); var fr_slide = $(".slide:first"); if(cur_slide.html() != ls_slide.html()) { cur_slide.hide(); cur_slide.next(".slide").show(); } else { cur_slide.hide(); fr_slide.show(); } } </script> <!--CSS--> <style type="text/css"> .slide-hook { float: left; padding: 5px; background-color: #990000; border-right: solid 1px #C2E1EF; } .slide-image { width: 500px; height: 375px; } #slider { width: 500px; height: 550px; } .slide { } </style> </head> <body> <div id="slider-capsule"> <div id="slides"> <!--Slide--> <div class="slide"> <div class="slide-title"> <h2>Title 1</h2> </div> <div class="slide-text"> Akdamar Church, Akdamar. Gurpinar Gevas, Surp Marinos </div> <div class="slide-image"> <img src="http://farm5.static.flickr.com/4004/4612662356_888c2a81ca.jpg" alt="slide-image"> </div> </div> <!--Slide--> <div class="slide"> <div class="slide-title"> <h2>Title 2</h2> </div> <div class="slide-text"> Suat ATAN,Akdamar Church, Akdamar. Gurpinar Gevas, Surp Marinos </div> <div class="slide-image"> <img src="http://farm6.static.flickr.com/5008/5307303826_a33a56c1ae.jpg" alt="slide-image"> </div> </div> <!--Slide--> <div class="slide"> <div class="slide-title"> <h2>Title 3</h2> </div> <div class="slide-text"> Havasor,Akdamar Church, Akdamar. Gurpinar Gevas, Surp Marinos 3 </div> <div class="slide-image"> <img src="http://farm4.static.flickr.com/3574/3341953499_ab044c925a.jpg" alt="slide-image"> </div> </div> <!--Slide--> <div class="slide"> <div class="slide-title"> <h2>Title 4</h2> </div> <div class="slide-text"> Akdamar Church, Akdamar. Gurpinar Gevas, Surp Marinos </div> <div class="slide-image"> <img src="http://farm4.static.flickr.com/3564/3342789118_9de9992351.jpg" alt="slide-image"> </div> </div> </div> </div> <div id="slider-navig"> <div class="slide-hook"> 1 </div> <div class="slide-hook"> 2 </div> <div class="slide-hook"> 3 </div> <div class="slide-hook"> 4 </div> </div> </div> </body> </html>
Burada mantık şudur: rotate fonksiyonumuz o anda “visible” yani görünür olan “slide” elemanını saklayıp, bir sonraki “visible” ediyor. En son slide’a gelince onu da saklayıp bu kez ilk elemanı visible ediyor.
Bu fonksiyonu da setInterval ile 4000 milisaniyede bir çağırıyoruz. setIntetval fonksiyonu aslında bir tetik fonksiyon. Bir insanın düzenli olarak aynı hareketi yapması gibi bir durum. Gerisi tamamen zamanlama dışı klasik fonksiyonlar.
İnternette bulunan yüzlerce karmaşık news slider ya da content slider scriptinden sıkıldıysanız, aşağıda “kendi ellerimle” hazırladığım Jquery news slideri tam size göre.
Aşağıdaki kodları indirip bir html dosyasına kayderek direkt olarak çalıştırabilirsiniz.
Sorularınız olursa çekinmeden sorunuz.
<!--
This script aims teaching a simple news slider application
By Suat ATAN
suatatan.wordpress.com
All rights reserved
Basit bir jquery haber akış uygulaması
Her hakkı saklıdır
-->
Suat ATAN's Simple News Slider
http://www.google.com/jsapi
google.load("jquery", "1.4.2");
$(document).ready(function() {
$(".slide").not(":first").hide();
$(".slide-hook").mouseover(function() {
var index = $(".slide-hook").index(this);
$(".slide").hide();
$(".slide:eq(" + index + ")").show();
$(".slide-hook").css("color", "black");
$(this).css("color", "red");
});
});
//dr
.slide-hook {
float: left;
padding: 5px;
background-color: #990000;
border-right: solid 1px #C2E1EF;
}
.slide-image {
width: 500px;
height: 375px;
}
.slide{
}
StringListProperty is a datastore value type that stores list items. Using StringListProperty is very easy:
#!/usr/bin/env python
from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from google.appengine.ext import db
class Page(db.Model):
title=db.StringProperty(multiline=False)
keywords=db.StringListProperty()
class MainHandler(webapp.RequestHandler):
def get(self):
newpage=Page()
newpage.title="Suat ATAN's books"
newpage.keywords=["book","author"]
newpage.put()
newpage=Page()
newpage.title="Suat ATAN's life"
newpage.keywords=["canada","author"]
newpage.put()
newpage=Page()
newpage.title="Suat ATAN's gusto"
newpage.keywords=["coffe","pizza"]
newpage.put()
pages=Page().all().filter("keywords" = "author")
for page in pages:
print i.title+"--"+i.keywords
def main():
application = webapp.WSGIApplication([('/', MainHandler)],
debug=True)
util.run_wsgi_app(application)
if __name__ == '__main__':
main()
We describe the StringListProperty in Page class and use it directly as newpage.keyword=[“item1”,“item2”]
When we want fetching rows that contains “author” string two rows will shown. Becuase only “Suat ATAN’s book” and “Suat ATAN’s life” pages have this string in its StringListPropery
I developed a script early for dressing pages with demanded template here is newer version:
from BeautifulSoup import BeautifulSoup
#Configuration
root="D:/users/suat.atan/Desktop/yenisehrivan/"
cssroot="/htmlres/css/"
jsroot="/htmlres/js/"
class TemplateMaker():
def generate(self,NUDEPAGE_NAME):
NUDEPAGE=open(root+"pages/"+NUDEPAGE_NAME+".html").read()
index=open(root+"pages/index.html").read()
soup = BeautifulSoup(index)
head= soup.findAll("head")
#header
header_1=soup.findAll("div",id="header")
#menu
header_2=soup.findAll("div",id="topmenu")
#change css
css=soup.findAll("link",id="maincss")
css[0]['href']=cssroot+NUDEPAGE_NAME+".css"
#change js
js=soup.findAll("script",id="mainjs")
js[0]['src']=jsroot+NUDEPAGE_NAME+".js"
HEADER=str(header_1[0])+str(header_2[0])
HEAD= str(head[0])
html1="""n
"""
html2="""n
n
n"
sign=""
HTML=html1+HEAD+html2+HEADER+NUDEPAGE+html3
file =open(root+"pages/gen-"+NUDEPAGE_NAME+".html","w")
file.write(HTML)
file.close()
print "--Generated "+NUDEPAGE_NAME
return True
tm=TemplateMaker()
tm.generate("detail")
The best way for dressing multiple page with a single template is Dreamweaver HTML template system. This system is ok but not available in Aptana. For this problem i coded a simple python script that can launchable under Aptana. This script reading head elements of main page for css and javascript’s after this asks the zero-templated(nude) page name and gets content from zero-templated page and combines template and nude page. After that writing templated page to a html file.
For using this script you must download BeatifulPython script and import it.
from BeautifulSoup import BeautifulSoup
root="D:/users/suat.atan/Desktop/myproject/"
index=open(root+"pages/index.html").read()
soup = BeautifulSoup(index)
head= soup.findAll("head")
HEAD= head[0]
html1=""""""
html2="""""" body_name=raw_input("Template page: (withoyut .html expression)-->") body=open(root+"pages/"+body_name+".html").read() html3=""
HTML=html1+str(HEAD)+html2+body+html3
file =open(root+"pages/new_template.html","w")
file.write(HTML)
file.close()
print "Generated"
Normally, getting url variables in Google App Engine Python is a line of code:
param=self.request.get(‘url_param’);
print param;
But i just discovered that it can also be, with a quick and easy method:
def get(self, url_param)
print url_param;
We can define url param that page work with it, in the get() function params. After that we can use it directly…