역시 예제는 소녀시대를 이용해서.....-_-;
우선 저는 파이썬을 전혀 모르는 상태에서 만들었기때문에 태클환영합니다ㅠ

앱엔진 셋팅은 이곳을 참조 http://mudchobo.tomeii.com/tt/390

우선 편하게 코딩하기 위해서 NetBeans를 이용할 것인데, 이것을 이용해서 애플리케이션을 실행하거나 하지는 않아요. 실행은 cmd창 띄운 뒤, 그냥 수동으로 실행할겁니다(설정을 못해서-_-) 디버깅도 어떻게 하는지 모르겠네요. 할 순 있는건가-_-;

넷빈즈실행 -> New Project -> Python -> Python Project -> Project이름은 GirlsGenerationsAge-_-; -> Finish!
프로젝트 Properties에서 Sources -> Encoding을 utf-8로 변경.

우선 DB모델을 만들어야하는데요.
[code]class Sosi(db.Model):
    name = db.StringProperty()
    birth = db.IntegerProperty()[/code]
db.Model을 상속받고, name과 birth라는 property가 있어요. name은 이름이고. birth는 태어난 해입니다.

첫 메인페이지를 만들어야하는데요.
[code]class MainPage(webapp.RequestHandler):
    def get(self):
        path = os.path.join(os.path.dirname(__file__), 'html/index.xhtml')
        self.response.out.write(template.render(path, {}))[/code]
이 페이지는 html/index.xhtml파일을 불러오게 되어있어요. 그럼 html/index.xhtml파일을 만들어봅시다.
우선 html이라는 폴더를 source에다가 하나 만들고, 거기에다가
New -> Other -> Other -> XHTML File -> File Name은 index입력 후 finish.
html/index.xhtml
[code]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>소녀시대 나이검색</title>
    </head>
    <body>
        <form action="/search" method="post">
            <div>소녀시대 멤버이름을 입력하세요 :
            <input type="text" name="name" />
            <input type="submit" value="검색" /></div>
        </form>
    </body>
</html>[/code]
메인페이지가 완성이 되었어요! 그럼 이제 요청을 하는 search페이지를 만들어봅시다.
[code]class Search(webapp.RequestHandler):
    def post(self):
        name = self.request.get('name')
        sosis = db.GqlQuery("SELECT * FROM Sosi WHERE name = :1", name)
        sosi = sosis.get()
        if sosi:
            now = time.localtime()
            age = now.tm_year - sosi.birth + 1
        else:
            age = 0
        path = os.path.join(os.path.dirname(__file__), 'html/search.xhtml')
        template_values = {
            'age': age,
            'name': name
        }
        self.response.out.write(template.render(path, template_values))[/code]
post요청이 들어오면 post함수를 호출하네요. name에 대한 파라메터값을 받아서 그 값을 이용해 GqlQuery를 날려줘서 sosi객체를 가져옵니다. 그러면 현재 year를 이용해서 나이를 구할 수 있습니다. 그럼 search.xhtml파일에 값을 나이와 이름을 넘겨줘서 요청하게 되어있네요.
html/search.xhtml
[code]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>소녀시대 나이 검색결과</title>
    </head>
    <body>
        {% ifequal age 0 %}
            {{name}}은/는 소녀시대의 멤버가 아닙니다.
        {% else %}
            {{name}}의 나이는 {{age}}세 입니다.
        {% endifequal %}
    </body>
</html>[/code]
저기 html안에 if문같은 것은 Django template language라는 것인데요. JSP에서 jstl같은게 아닐까요?-_-;
암튼 값이 없으면 0을 넘겨주기 때문에 0이면 멤버가 아니고, 나이가 나오면 멤버가 되는 형식으로 되어있습니다.

아래는 이해는 잘 못했습니다만, 어떤 요청이 오면 어떤 클래스를 요청하고 정의하는 것 같은데, 이렇게 쓰이더라구요-_-;
[code]application = webapp.WSGIApplication([
    ('/', MainPage),
    ('/search', Search)
], debug=True)[/code]
끝으로 메인페이지입니다.
[code]def main():
    db.delete(Sosi.all())
    Sosi(name=u"윤아", birth=1990).put()
    Sosi(name=u"수영", birth=1990).put()
    Sosi(name=u"효연", birth=1989).put()
    Sosi(name=u"유리", birth=1989).put()
    Sosi(name=u"태연", birth=1989).put()
    Sosi(name=u"제시카", birth=1989).put()
    Sosi(name=u"티파니", birth=1989).put()
    Sosi(name=u"써니", birth=1990).put()
    Sosi(name=u"서현", birth=1991).put()
    run_wsgi_app(application)[/code]
뭐 우선 처음 애플리케이션이 실행될 때, DB에 있는 걸 다 날려버리고, 해당 데이터를 삽입하고 시작하게 됩니다.
invalid-file

파이썬 전체 코드입니다.



이제 YAML파일을 만들어야 합니다.
New -> Other -> Other -> YAML File -> File Name은 app, Folder는 src폴더로 지정해야합니다.
app.yml
[code]application: ggages
version: 1
runtime: python
api_version: 1

handlers:
- url: /.*
  script: GirlsGenerationsAge.py[/code]
우선 script부분에서 해당 py파일을 넣어주면 되고, application에는 App Engine에서 생성한 Application ID를 입력해주시면 됩니다. Girls' Generations Age의 약자로.....ggages(최소 6자기때문에 s를...-_-)

실행을 해봅시다.
cmd창을 열어서 해당 넷빈즈 프로젝트로 이동합니다. 아래와 같이 실행합니다.
[code]C:\Users\mudchobo\Documents\NetBeansProjects\GirlsGenerationsAge>dev_appserver.py src/[/code]
그리고, http://localhost:8080 으로 브라우저를 띄워서 접속해봅시다.
실행이 제대로 된다면, 이제 구글에 올려봅시다.
[code]C:\Users\mudchobo\Documents\NetBeansProjects\GirlsGenerationsAge>appcfg.py update src/[/code]
이렇게 하면 처음하는 경우에 구글계정의 아이디와 비밀번호를 물어봅니다. 입력하면 바로 디플로이됩니다.

http://ggages.appspot.com/에 접속하면 디플로이 된 것을 확인할 수 있습니다. 자신의 계정에 맞게 디플로이하면 되겠죠?^^

 
Posted by 머드초보
,
 
http://appengine.google.com/start 에 접속하면 로그인을 하라고 나옵니다. 구글계정으로 로그인 하고나면 Create an Application버튼과 왤컴한다는 내용이 있을겁니다.
사용자 삽입 이미지
전 여기서 좀 고생을 했는데요-_-; SMS인증을 받아야하거든요. 국내통신사도 지원한다고 했는데, 전 안되는 것이였습니다. 결론은 전화번호를 잘못 입력해서......-_-;
Create an Application을 클릭하면 아래와 같은 화면이 나옵니다.
사용자 삽입 이미지
Country는 당연히 우리나라는 없더군요. Mobile Number에서 저는 +82 010 0000 0000이라고 입력하니....안되더군요-_-; 바보같이-_- 010에서 0을 빼야합니다ㅠ +82 10 0000 0000 라고 하니 되더군요 ㅠ 하루고생했습니다ㅠ

보내고 나면 애플리케이션을 만들 수 있는데요. 우선 Application Identifier:에유니크한 이름을 적습니다. 여기서좀 이상한 점이......분명 available이라고 해놓고, 등록하려고 하면 이미 사용하고 있다고 나오는 경우가 있더라구요. sosiage라고 등록하려고 하니 그렇더라구요-_-; 이 app id는 한번 등록하면 바꿀 수 없구요. 총 10개의 애플리케이션을 만들 수 있습니다. 더 쓰고 싶으면 돈내라 이건가.....

애플리케이션을 생성했으면 이제 개발툴을 설치해야합니다.
http://code.google.com/intl/ko-KR/appengine/downloads.html 이곳에 가면 다운로드할 수 있는데, 분명 저번 세미나에서 보여줬던 관리툴같은 게 있었던 것 같은데, Mac OSX용만 있나봅니다 ㅠ
아.....이걸 설치하기전에 파이썬부터 설치해야합니다.

http://www.python.org/download/
안정적인 버전이 2개가 있는데, 2.6.1과 3.0.1이 있네요.
3.0.1을 설치하면 안됩니다-_-;
2.6.1버전을 설치해야합니다. 설치는 그냥 다음신공으로 설치할 수 있어요. 쉬워요!

그 다음 개발툴을 설치하면 됩니다.
그리고 난 다음에 데모를 실행해서 잘 되는지 확인해보면 됩니다.
시작 -> 실행 -> cmd를 열고......디폴트로 설치했다면 이곳에 데모가 있을 겁니다.
[code]cd C:\Program Files\Google\google_appengine\demos
dev_appserver.py guestbook/[/code]이렇게 실행하면
INFO     2009-03-01 05:08:50,332 dev_appserver_main.py] Running application guestbook on port 8080: http://localhost:8080
웹브라우저에서 http://localhost:8080을 입력하면 초간단 방명록이 실행되고 있을겁니다-_-;

PS. python이라는 언어가 참 간결하고 좋긴한데, 전.....개인적으로 다른 언어도 지원했으면 좋겠네요-_-;

 
Posted by 머드초보
,
 
파이썬까지 손대보는군요. 구글 앱스 엔진때문에-_-;
기본적인 언어를 다루시는 분이라면 그리 어렵지 않게 접근할 수 있어요^^
대신 파이썬은 툴이 별로 없는 것 같은데, NetBeans에 좋은 툴이 있습니다^^(파이썬을 안지 별로 안돼서-_-;)
아직 정식버전에 포함되지 않는 것 보니 문제가 좀 있나봅니다-_-;
자세한 사항은 아래 사이트에서^^
http://wiki.netbeans.org/NetBeansPythonTutorial

넷빈즈를 실행하고 메뉴에서 Tools -> Plugins에서 Available Plugins에 Python이라는 것이 있을 겁니다. 그걸 체크해서 설치하시면 됩니다.
설치하시면 아래와 같이 Installed에 나오게 됩니다.

우선 기본적으로 파이썬이 설치가 안되어 있어도 Jython 2.5b0+버전이 설치가 되기 때문에 그냥 이걸 쓰셔도 돼요. 하지만, 파이썬이 깔려있다면 자동으로 잡아주네요^^ 전 플러그인을 설치하자마자, Jython2.5b0+과 Python2.6.1버전 2개가 보이더군요. 자동으로 잡아주다니 대단합니다^^

사용자 삽입 이미지

Installed에 설치되면 된겁니다^^ 참 쉽져잉?

설치한 김에 Hello World를 찍어봅시다.
아......우선 파이썬에서도 역시 빠지지 않는 한글문제가 존재합니다-_-(이건 어딜 가나 말썽이군요-_-)
우선 해당 페이지를 utf-8로 인코딩된 페이지를 만들어야합니다.
New Project -> Python -> Python Project -> ProjectName은 HelloPython, Python Platform은 원하는 걸로 선택하시고...
사용자 삽입 이미지
Finish를 누르면 완성됩니다. 바로 Hello코드가 완성되어 있습니다. 만약 Jython 2.5b0+로 하셨다면 에러가 안나겠지만, 설치된 Python 2.6.1로 하시면 에러가 납니다-_-; 저 같은 경우에는 납니다-_-;
[code]File "C:\Users\mudchobo\Documents\NetBeansProjects\HelloPython\src\HelloPython.py", line 3
SyntaxError: Non-ASCII character '\xbf' in file C:\Users\mudchobo\Documents\NetBeansProjects\HelloPython\src\HelloPython.py on line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details[/code]
원인은 자동으로 생성한 코드에 한글이 들어가서 발생한 것 같습니다. 아래가 자동으로 생성한 코드입니다.
[code]__author__="mudchobo"
__date__ ="$2009. 3. 1 오전 11:48:04$"

if __name__ == "__main__":
    print "Hello";[/code]
3번째 줄에 한글이 있군요-_-; 그래서 페이지 인코딩을 utf-8로 변경해야합니다. 2가지 작업을 해야합니다-_-;
페이지 맨 위에
[code]# -*- coding:utf-8 -*-[/code]를 추가해주고, 프로젝트 Properties에서 Sources에서 encoding을 utf-8로 변경해주어야 합니다.
그러면 잘 될 겁니다 ^^
 
Posted by 머드초보
,