顯示具有 Python 標籤的文章。 顯示所有文章
顯示具有 Python 標籤的文章。 顯示所有文章

2011年10月1日 星期六

將Google Appengine 的資料轉成 JSON格式輸出

將以下程式加入程式中
 
from google.appengine.ext import db
from google.appengine.ext.db import BadValueError
import datetime, time
from google.appengine.api import users

SIMPLE_TYPES = (int, long, float, bool, dict, basestring, list)

def to_dict(model):
    output = {}
    if isinstance(model, db.Query):
        output = []
        for v in model:
            output.append(to_dict(v))
        return output
    elif isinstance(model, list):
        output = []
        for v in model:
            output.append(to_dict(v))
        return output
 
    for key, prop in model.properties().iteritems():
        value = getattr(model, key)

        if value is None or isinstance(value, SIMPLE_TYPES):
            output[key] = value
        elif isinstance(value, datetime.date):
            output[key] = value.strftime("%Y/%m/%d %H:%M")
        elif isinstance(value, db.GeoPt):
            output[key] = {'lat': value.lat, 'lon': value.lon}
        elif isinstance(value, db.Model):
            output[key] = to_dict(value)
        elif isinstance(value, users.User):
            output = {}
            methods = ['nickname', 'email', 'auth_domain']
            for method in methods:
                output[method] = getattr(value, method)()
            return output  

        else:
            raise ValueError('cannot encode ' + repr(prop))
    return output

使用範例

import model


rooms= model.Room.all()
self.response.out.write(model.to_dict(rooms))

參考資料

GAE返回JSON数据
How to serialize db.Model objects to json
JSON serialization of Google App Engine models

2011年7月22日 星期五

7998住宿網

最近完成了一個網站架在Google的服務上, 提供日租訂房的服務,可提供日租套房,民宿等訂房服務。如果有房東看到這篇可以來試試看這個系統





網址:http://www.7998.com.tw/

2010年11月24日 星期三

[python] Google app engine 登出功能

from google.appengine.api import users

#利用users api取得登出網址(後面的參數是登出後要前往的頁面)
logoutUrl = users.create_logout_url("/")

2009年8月11日 星期二

Python + Mozembed

第一步
import gtkmozembed

第二步
產生元件
self.web_view = gtkmozembed.MozEmbed()

第三步
放入容器
self.web_box.add(self.web_view)

第四步
顯示畫面
self.web_view.load_url("www.google.com")

Python + Webkit

要在Python中加入Webkit的內容其實非常容易
首先第一步當然是
import webkit

然後產生webkit元件
self.web_view = webkit.WebView()

接下來就是將webkit的畫面放進準備好的容器中
如一個Box這邊用的是一個box
self.web_box.add(self.web_view)

再來就是設定webkit要顯示的網頁
以Google為例
self.web_view.open("http://www.google.com.tw")

這樣就完成了...網頁的內容就會呈現在你想要顯示的位置了

2008年9月6日 星期六

[Python]透過DBUS調整螢幕亮度

今天研究了一下Screenlets的BrightnessScreenlet.py這支程式
發現到他調整螢幕亮度的方式是由DBus來控制的
在這邊把主要重點的部份寫出來

#載入DBUS
import dbus

#設定Bus
bus = dbus.Bus(dbus.Bus.TYPE_SESSION)
hal_object = bus.get_object('org.freedesktop.PowerManagement','/org/freedesktop/PowerManagement/Backlight')

#設置interface
hal_interface = dbus.Interface(hal_object,'org.freedesktop.PowerManagement.Backlight')

#由這dbus的interface去設定亮度(0~100)
hal_interface.SetBrightness(brightness)

2008年8月22日 星期五

[Python]用DBus和Pidgin通訊

要用Python呼叫正在執行中的Pidgin其實非常的簡單
只要你的Pidgin的DBus的Function正常執行
可以用這行程式檢查

$dbus-monitor type=signal interface="im.pidgin.purple.PurpleInterface"


這是監聽DBus上由"im.pidgin.purple.PurpleInterface"所發出的訊號
看得到回應就是有,看不見就是沒有

如果你的DBus Function正常執行的話
你只要在Python 的前面import 進dbus
再加點設定就OK了
就像這樣

import dbus bus = dbus.SessionBus()
obj = bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject")
purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")


接著就能在程式中呼叫pidgin中的Dbus函式了

如以下是一個登入的function
def login(account_protocol, account_name, account_pass):
account = purple.PurpleAccountNew(account_name, account_protocol)
purple.PurpleAccountSetPassword(account, account_pass)
purple.PurpleAccountsAdd(account) purple.PurpleAccountSetEnabled(account,"gtk-gaim",1)
purple.PurpleBlistSetVisible(1)



其他的參考資訊可在Pidgin官網查到
http://developer.pidgin.im/wiki/DbusHowto

2008年6月21日 星期六

[Python]Glade加Python的GUI設計入門

已經有一段時間沒有用Glade和Python寫程式了
為了怕自己忘記...所以還是記錄下來好了
首先在開始之前....要先安裝以下套件
Python....這是一定要的...不然程式不可能會Run
Glade3.... 這在開發階段是必須的...方便視窗的制作...當然還有別的方法可以做...那之後再討論
PyGtk.... 這也是必要的圖形介面的API
然後就是一步一步的開始程式設計

首先開啟Glade3



產生一個Frame




接著產生一個box(hbox或vbox都可以差別在直的排列或橫向排列)
設定切成幾份...這是切三份


然後放入元件...這邊放了一個Label和一個Text加一個hbox

在hbox中再放入兩個button...如此一來畫面就差不多完成了


接下來設定事件



最後就可以開始程式設計了...

程式碼如下:

#!/bin/python
import gtk.glade
import gtk
import pygtk

class View:
def __init__(self):
#載入glade檔
self.UI = gtk.glade.XML("View.glade")
#載入視窗
self.window = self.UI.get_widget("window1")

#戴入元件
self.btn1 = self.UI.get_widget("eventbox1")
self.btn2 = self.UI.get_widget("eventbox2")

#顯示視窗畫面
self.window.show_all()

#設定事件
dic = {"on_window1_destroy": gtk.main_quit,
"on_btn1_button_press_event":self.on_btn1_button_press_event,
"on_btn2_button_press_event":self.on_btn2_button_press_event
}

#連接事件
self.UI.signal_autoconnect(dic)

#事件的Function
def on_btn1_button_press_event(self,widget,event):
print "hello"

def on_btn2_button_press_event(self,widget,event):
print "world"

#以下為程式進入點
def main():
gtk.main()

if __name__ == "__main__":
tvexample = View()
main()



這是完成的畫面...