Feeds:
文章
留言

Archive for 四月 8th, 2008

hellowebapp.py

import cgi
import os
import wsgiref.handlers
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template

class MainPage(webapp.RequestHandler):
  def get(self):
    self.response.headers[‘Content-Type’] = ‘text/html; charset=UTF-8’
    if cgi.escape(self.request.get(‘hl’)) == ‘en’ :
        template_values = {
          ‘label_username’: ‘ID’,
          ‘label_password’: ‘Password’,
          ‘label_login’:’Login’
        }

    else:           
        template_values = {
          ‘label_username’: ‘帳號’,
          ‘label_password’: ‘密碼’,
          ‘label_login’:’登入’
        }

    path = os.path.join(os.path.dirname(__file__), ‘hellowebapp.html.template’)
    self.response.out.write(template.render(path, template_values))

class FormTest(webapp.RequestHandler):
  def post(self):
    self.response.out.write(‘<html><body>POST Field:<br/>’)
    self.response.out.write(‘username: ‘ + cgi.escape(self.request.get(‘username’)) + ‘<br/>’)
    self.response.out.write(‘password: ‘ + cgi.escape(self.request.get(‘password’)) + ‘<br/>’)
    self.response.out.write(‘<br/> GET Field: <br/>’)
    self.response.out.write(‘a: ‘ + cgi.escape(self.request.get(‘a’)) + ‘<br/>’ )
    self.response.out.write(‘author: ‘ + cgi.escape(self.request.get(‘author’)) + ‘<br/>’ )
    self.response.out.write(‘</body></html>’)           

def main():
  application = webapp.WSGIApplication(
                                       [(‘/’, MainPage),
                        (‘/formtest’, FormTest)
                       ],
                                       debug=True)

  wsgiref.handlers.CGIHandler().run(application)

if __name__ == "__main__":
  main()

hellowebapp.html.template

<html>
<body>
    <form method="post" action="/formtest?a=1&author=cwchiu">
    {{ label_username }}:<input type="text" name="username" value="guest"></input><br/>
    {{ label_password }}:<input type="password" name="password" value="1111"></input><br/>
    <input type="submit" value="{{label_login}}"></input>
    </form>

    <a href="{{ url }}">{{ url_linktext }}</a>
</body>
</html>

執行結果

http://localhost:8080/

007

http://localhost:8080/?hl=en

008

Read Full Post »

hellowebapp.py 程式

import cgi
import wsgiref.handlers
from google.appengine.ext import webapp

class MainPage(webapp.RequestHandler):
  def get(self):
    self.response.headers[‘Content-Type’] = ‘text/html; charset=UTF-8’
    self.response.out.write("""
        <html><body>
        <form method="post" action="/formtest?a=1&author=cwchiu">
        帳號:<input type="text" name="username" value="guest"></input><br/>
        密碼:<input type="password" name="password" value="1111"></input><br/>
        <input type="submit" value="登入"></input>
        </form>
        </body></html>""")

class FormTest(webapp.RequestHandler):
  def post(self):
    self.response.out.write(‘<html><body>POST Field:<br/>’)
    self.response.out.write(‘username: ‘ + cgi.escape(self.request.get(‘username’)) + ‘<br/>’)
    self.response.out.write(‘password: ‘ + cgi.escape(self.request.get(‘password’)) + ‘<br/>’)
    self.response.out.write(‘<br/> GET Field: <br/>’)
    self.response.out.write(‘a: ‘ + cgi.escape(self.request.get(‘a’)) + ‘<br/>’ )
    self.response.out.write(‘author: ‘ + cgi.escape(self.request.get(‘author’)) + ‘<br/>’ )
    self.response.out.write(‘</body></html>’)           

def main():
  application = webapp.WSGIApplication(
                                       [(‘/’, MainPage),
                        (‘/formtest’, FormTest)
                       ],
                                       debug=True)

  wsgiref.handlers.CGIHandler().run(application)

if __name__ == "__main__":
  main()

執行結果

005

006

相關文章
[1] Chui-Wen Chiu, "Google App Engine 嚐鮮測試"
[2] Chui-Wen Chiu, "Google App Engine 嚐鮮測試(2)–webapp framework"

Read Full Post »

將上一篇"Google App Engine 嚐鮮測試"的helloworld.py 內容用 webapp framework 改寫成如下

import wsgiref.handlers

# 引入 webapp module
from google.appengine.ext import webapp

# request handler
class MainPage(webapp.RequestHandler):
  # HTTP GET Handler
  def get(self):
    self.response.headers[‘Content-Type’] = ‘text/html; charset=UTF-8’
    self.response.out.write(‘Hello, webapp World!+<span style="color:red">你好嗎?</span>’)

# 程式進入點
def main():
  # 建構 WSGIApplication 應用程式
  # URL / 對應到 MainPage Request Handler
  # debug=true 啟動除錯模式
  application = webapp.WSGIApplication(
                                       [(‘/’, MainPage)],
                                       debug=True)

  # 啟動程式
  wsgiref.handlers.CGIHandler().run(application)

if __name__ == "__main__":
  main()

執行結果

 003

Read Full Post »

Google App Engine 嚐鮮測試

今天 Google 推出 Google App Engine,主要提供一個網路應用平台,不過他用的是我不太熟悉 Python 語言,真希望能夠支援 PHP。

雖說如此,還是下載 SDK 簡單的測試一下,我的環境為 Windows XP+Python2.5+App Engine SDK,安裝 SDK 之後,預設安裝路徑應該在

C:Program FilesGooglegoogle_appengine

其中有兩個 *.py 檔案

1. dev_appserver.py 啟動開發用的伺服器
2. appcfg.py 上傳應用程式到 Google App Engine

首先第一個 HelloWorld 教學範例是先建立如下兩個檔案在 C:Program FilesGooglegoogle_appenginehelloworld

helloworld.py

print ‘Content-Type: text/plain’
print “
print ‘Hello, world!’

app.yaml

application: new-project-template
version: 1
runtime: python
api_version: 1

handlers:
– url: .*
  script: main.py

開啟 console 視窗切換到 C:Program FilesGooglegoogle_appengine,執行如下命令

python dev_appserver.py helloworld/

如下圖:

001

IE 瀏覽畫面

002

以上測試只能算是初探 Google App Engine 的開發環境,還尚未進入 Framework…. 找時間再研究看看onion21

Read Full Post »

官方網站:http://ondras.zarovi.cz/sql/demo/

畫面截圖

002

操作上相當還算簡單,速度也可接受,最特別的是該服務有提供 Save/Load 功能,臨時需要可以試試看~

Read Full Post »

話說前幾天 Google 釋出 GMail Uploader 程式,當我沒有仔細閱讀說明時,我已經迅速的下載安裝完成,可當我執行時,一直出現無法授權的錯誤。後來發現該程式只能被用於 Google Apps。心灰意冷之際,我用 .NET 寫了一個簡單的上傳 *.eml 程式,利用 GMail 提供的 SMTP 寄件給自己達到上傳目的。當我高興上傳順利之時,才想到 GMail 支援 IMAP,其實可利用 Outlook Express 簡單達到上傳/下載的功能。

當我將大量積存的 *.eml 上傳一夜之後。隔天用 GMail 發送郵件時,居然出現如下的錯誤訊息:

gmail_limit

訊息太簡短難以不明,再點選 Learn more 獲得如下的訊息

Sending limits

In an effort to fight spam and prevent abuse, Google will temporarily disable your account if you send a message to more than 500 recipients or if you send a large number of undeliverable messages. If you use a POP or IMAP client (Microsoft Outlook or Apple Mail, e.g.), you may only send a message to 100 people at a time. Your account should be re-enabled within 24 hours.

If you communicate with the same group of people on a regular basis, you might be interested in Google Groups.

If you send a large number of undeliverable messages, we suggest verifying your contacts’ email addresses. It’s also important that everyone you are sending mail to is willing to receive it.

Learn more about best practices for sending a large amount of mail through Gmail.

意思是說我的帳號符合 Gmail 以下三個限制,將使帳號暫時失效
1. 傳送超過 500封郵件
2. 傳送大量無法投遞的訊息
3. 使用 POP 或 IMAP 工具,每次收件者不超過 100 人

很明顯的我符合第一個條件 onion08

還好除了發信不允許之外,其他收信功能都可正常使用,

接下來只能看看是不是真的 24 小時之後會恢復寄件功能~

由這件事情看來,之前想整合 GMail 來發送網站信件是不切實際….

不過少量信件倒可以嘗試看看,可是未來不確定規則是否會更動充滿著變數~

 

相關文章
[1] Henk Kleynhans, "Gmail has a Daily Quota"
[2] "Gmail and Sending Limits on Outgoing Mail"

Read Full Post »