はじめてのpython

47
はじめてのPython Google App Engineでお気軽 Webアプリ開発 本田 克己@GDD九州 こちらのイベント向けの資料です https://www.facebook.com/events/272819922852292/

Upload: katsumi-honda

Post on 30-Jun-2015

3.645 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: はじめてのPython

はじめてのPython

Google App Engineでお気軽Webアプリ開発

本田 克己@GDD九州

こちらのイベント向けの資料ですhttps://www.facebook.com/events/272819922852292/

Page 2: はじめてのPython

GDG九州って

GDG九州はGoogle関連の技術が好きな開発者、使っている開発者、使いたい開発者の交流の場です。

Googleが直接運営している訳ではありません。

ちなまにGDGはGoogle Developer Groupsの頭文字らしいです。以前はGTUG(Google Technology User Groups)という名前でした。

福岡の他、九州各地で勉強会を開いています。昨年、大分では温泉合宿を行っています。

Google+やFacebookのグループで情報交換などを行なっています。「GDG九州」で検索して、是非グループに参加してみてください。

Page 3: はじめてのPython

はじめに

今日やること

● Pythonのお勉強 : 20分● Google App EngineでWebアプリを作る : 20分● その他の時間 : 5分

と、大丈夫ですか?って感じのスケジュールになっています。

Page 4: はじめてのPython

インタラクティブシェルでPythonに触れてみる

Pythonには、インタラクティブシェルというのが用意されています。

インタラクティブシェルを使うと対話的にPythonを使用できます。

Windowsな人 Macな人

スタートメニューからPython(command line)を実行します

ターミナルを開いてpythonと入力してreturnキー

ターミナルは、アプリケーションフォルダのユーティリティに入っています。

Spotlightで検索してもいいかも

スタートメニューからPython(command line)を実行します

Page 5: はじめてのPython

インタラクティブシェル

こんな感じのが表示されればOK

Page 6: はじめてのPython

Pythonでプログラム書いてみる

インタラクティブシェルで、プログラムを書いてみます。

>>> の後ろに入力して、Enterキーを押します。

>>> 1 + 12>>> print('Hello world!')Hello world!

Python簡単だ�

Page 7: はじめてのPython

インタラクティブシェルの終了

Windowsの人

Ctrl + z を押したあと、Returnキーを押します

>>> ^Zとなっている状態でReturnキー

Macの人

Ctrl + d を押します。

Page 8: はじめてのPython

Pythonの基本 : 変数

データを保持しておくのに、変数を使うことができます。

変数名の大文字、小文字は区別されます。

変数の最初の文字に数字は使えません

変数に日本語などの文字は使えません(3.xからは使えます)

>>> a = 1>>> b = 2>>> c = 3>>> a + b + c6

>>> first_name = 'katsumi'>>> last_name = 'honda'>>> full_name = first_name + ' ' + last_name>>> print(full_name)katsumi honda

Page 9: はじめてのPython

Pythonの基本 : 数値

数値は、割と直感的に使えるので、今のところは細かいことは気にしなくても大丈夫です。

数値の先頭を0から始めると、8進数として扱われるので、ここだけ注意してください。(16進数は0xから始めます)

>>> a = 100 # 10進数>>> b = 0100 # 8進数>>> c = 0x100 # 16進数>>> print(a, b, c)(100, 64, 256)>>>

Page 10: はじめてのPython

Pythonの基本 : 数値の演算

加算 : +減算 : -乗算 : *除算 : /余り : %べき乗 : **

>>> a = 10>>> b = 3>>> a + b13>>> a - b7>>> a * b30>>> a / b3>>> a % b1>>> a ** b1000

Page 11: はじめてのPython

Pythonの基本 : 文字列

文字列は、' か “ で囲みます。

クォーテーションの前にuをつけるとUnicode文字列になります。

日本語の文字列を扱う時は、Unicode文字列を使うようにしておいたほうが問題が起こりにくいので、uをつけるようにしましょう。

長い文字列はクォーテーションを3つ繋げて囲むと便利です。

>>> fruit = 'apple'>>> fruit = u'りんご'>>> print(fruit)りんご>>> long_text = u'''今日は... はじめてのPythonに... 参加しています'''>>> print(long_text)今日ははじめてのPythonに参加しています

Page 12: はじめてのPython

Pythonの基本 : 何もない値

>>> money = None>>> print(money)None

何もないことを表すのに、Noneを使います。

Page 13: はじめてのPython

Pythonの基本 : 真偽値

プログラムの条件分岐とかで使うやつです

TrueFalse

と、頭文字が大文字になります

>>> t = True>>> f = False>>> t, f(True, False)

Page 14: はじめてのPython

Pythonの基本 : 論理演算

真偽値の組み合わせて判断する時に、論理演算を行います。and or not を使います。

>>> True and TrueTrue>>> True and FalseFalse>>> False and FalseFalse>>> True or TrueTrue>>> True or FalseTrue>>> False or FalseFalse>>> not TrueFalse>>> not FalseTrue

Page 15: はじめてのPython

Pythonの基礎 : 文字列の操作

>>> 'hello ' + 'world''hello world'

■連結文字列と文字列を + で繋げられます

>>> 'hello' * 10'hellohellohellohellohellohellohellohellohellohello'

■繰り返し文字列に数字を掛けると、文字列を繰り返します

■フォーマット%sや%d等を含んだフォーマット文字列に、%演算を行うと値を埋め込めます

>>> 'hello %dst %s' % (1, 'python')'hello 1st python'

Page 16: はじめてのPython

Pythonの基本 : リスト、タプル、辞書

複数の値を扱うのに、リストやタプル、辞書を使うと便利です

■リスト順序を持った値の集合です。値の追加や削除など、変更が行えます。[ と ]で囲んで、値をカンマで区切ります。

■タプルリストと同じような感じですが、変更が行えません。( と )で囲んで、値をカンマで区切ります。

■辞書キーと値を組み合わせた集合です。連想配列とかいうのと同じです。{ と }で囲んで、キー: 値の組み合わせをカンマで区切ります

Page 17: はじめてのPython

Pythonの基本 : リスト

>>> mylist = ['apple', 100]>>> mylist[0]'apple'>>> mylist[1]100>>> mylist[2]Traceback (most recent call last): File "<stdin>", line 1, in <module>IndexError: list index out of range>>> mylist.append(True)>>> mylist['apple', 100, True]

1つのリストに色々な型の値を入れることができます。リストの変数の後に [] で数字を指定すると、その場所の値が得られます(この数字を添字といいます)

appendでリストに追加できます

Page 18: はじめてのPython

Pythonの基本 : タプル

>>> mytuple = ('abc', 123)>>> mytuple[0]'abc'>>> mytuple[1]123>>> mytuple[1] = 234Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: 'tuple' object does not support item assignment

リストと同じように使えますが、変更だけできません。

Page 19: はじめてのPython

Pythonの基本 : 辞書

>>> mydict = {'name': 'apple', 'price': 100, 1: True}>>> mydict{1: True, 'price': 100, 'name': 'apple'}>>> mydict['name']'apple'>>> mydict[1]True

キーには、文字列以外に数値など、使用出来ます。

が、文字列を使うことがほとんどです。タプルもたまにキーに使うことがあります。

リストはキーには使えません。

>>> mydict[(1,1)] = 'red'>>> mydict{1: True, 'price': 100, 'name': 'apple', (1, 1): 'red'}

Page 20: はじめてのPython

Pythonの基本 : インデント

Pythonでは、コードブロックを表すのにインデントが使われます。

こんな感じになります。とりあえず入力して実行してみましょう

>>> for i in range(50):... if i > 0 and (i % 3 == 0 or i % 10 == 3):... print i...

インデントをつける前の行末のコロン : を忘れないように気をつけてください。

インデントの数は、同じコードブロックで統一されていれば問題ありません。

一般的にはインデントに半角スペースを4つ使用します。

Page 21: はじめてのPython

Pythonの基本 : 条件分岐

変数の内容などによって、プログラムの動作を切り替えたりするのを条件分岐といいます。if else elif を使います。

>>> food = 'karaage'>>> if food == 'toriten':... print 'nice!'... elif food == 'karaage':... print 'so-so'... else:... print 'what?'... so-so

Page 22: はじめてのPython

Pythonの基本 : 繰り返し

繰り返して処理を行う時は、forループかwhileループを使います。

■forループ

リスト等の集合を1つずつ取り出して実行します。

range()関数で任意の数の、リストが生成できるので組み合わせて使用することも多いです。

>>> for i in range(10):... print i... 0123456789

Page 23: はじめてのPython

Pythonの基本 : whileループ

条件が真(True)の間、繰り返し処理を行います

>>> i = 10>>> while i > 0:... print i... i = i - 1... 10987654321

Page 24: はじめてのPython

Pythonの基本 : 繰り返し

>>> for food in ['toriten', 'karaage', 'tatutaage']:... print '%s : %d' % (food, len(food))... toriten : 7karaage : 7tatutaage : 9

任意のリストを順番に処理できます。任意のリストを順番に処理できます。

ここでは、それぞれの文字数を表示しています。

len()関数で、文字の長さや、リストの長さを取得できます。

Page 25: はじめてのPython

Pythonの基本 : 関数

何度も行う処理は、コピペしないで関数にまとめます。

def 関数名(パラメータ1, パラメータ2, ...): 関数の処理 return 処理結果

といった感じで関数を定義します。

関数を実行する時は

関数名(パラメータ1, パラメータ2, …)

という感じです。

Page 26: はじめてのPython

Pythonの基本 : 関数

>>> def oita_check(food):... if 'toriten' == food:... return 'nice'... elif 'karaage' == food:... return 'so-so'... else:... return 'what?'... >>> oita_check('tatutaage')'what?'>>> oita_check('toriten')'nice'>>>

大分チェック関数を作ってみる

Page 27: はじめてのPython

Pythonの基本 : モジュール

様々な機能がモジュールとして提供されています。

モジュールの機能を使う為には、 import で、モジュールをインポートします。

>>> import datetime>>> datetime.datetime.now()datetime.datetime(2013, 4, 18, 15, 45, 32, 263188)

datetimeモジュールをインポートして、現在日時を取得しています。

datetime.datetimeというのが冗長ですが、

from モジュール名 import インポートするものという形式を使用することもできます

>>> from datetime import datetime>>> datetime.now()datetime.datetime(2013, 4, 18, 15, 51, 4, 803230)

Page 28: はじめてのPython

Pythonの基本 : クラス

オブジェクト指向とかいうので出てくるクラスです。

class Food(object): def __init__(self, name, price): self.name = name self.price = price def how_match(self, gram): print '%sの値段は%d円です' % (self.name, self.price * gram / 100.0)

toriten = Food(u'とり天', 200)toriten.how_match(150)

こんな感じで使います。

クラスの名前は、大文字で始めるのが一般的です。クラス名(パラメータ...)で、オブジェクトが作られます__init__関数は、オブジェクトが作られる時に呼ばれます

Page 29: はじめてのPython

Pythonの基本

他にも、色々と知っておいたほうがいい決まりとか、便利な機能とかがあるのですが、これまでの内容がなんとなくわかれば、なんとなく作り始められます。

全部を理解していなくても大丈夫です。

Page 30: はじめてのPython

エディタを使う

インタラクティブシェルは、すぐ実行結果が分かって便利ですが何回も使うコードを毎回入力するのは大変です。

エディタを使って、コードをファイルに保存しましょう。

Page 31: はじめてのPython

文字コードの指定

ファイルを保存する時は、UTF-8を指定してください。(UTF-8じゃないとダメって訳じゃないですが、統一しておきます)

ファイルの拡張子は .py にします。

ファイルの1行目か2行目に、

# -*- coding: utf8 -*-

という行を入力します。(これでPythonにファイルの文字コードを教えてあげています)

Page 32: はじめてのPython

エディタでコードを書いてみる#!/usr/bin/env python# -*- coding: utf8 -*-class Food(object): def __init__(self, name, price): self.name = name self.price = price def how_match(self, gram): unit = gram / 100.0 print('%s : %d' % (self.name, self.price * unit))

if __name__ == '__main__': karaage = Food('karaage', 200) toriten = Food('toriten', 180) karaage.how_match(200) toriten.how_match(300)

Page 33: はじめてのPython

アプリケーションの設定

Application Nameに guest-book

Application Directoryに デスクトップ等を指定して

[Create]ボタンを押します。

Admin Port, Portは、他の開発ツールとバッティングしないように気をつけてください。

Page 34: はじめてのPython

起動してみる

guest-bookが選択された状態で、[Run]ボタンを押します。

Webブラウザで http://localhost:8080/ にアクセスします。

Port番号を変更した場合は、8080の部分を合わせてください。

Page 35: はじめてのPython

Google App EngineでWebアプリを作る

準備万端なので、いよいよWebアプリを作ります。ゲストブック的なものを作ってみましょう。

まずはGoogleAppEngineLauncherを起動します。メニューから [File] → [New Application] を選択します

Page 36: はじめてのPython

Hello world!

Hello world!!

って表示されました?

表示できた人は、周りで困っている人がいたら助けてあげてください

Page 37: はじめてのPython

入力フォーム

guest-bookのmain.pyを開いて編集していきます。2行目に # -*- coding: utf8 -*-を追加します。

template という変数名で、HTMLを入力します。

MainHandlerクラスのget関数内の

self.response.write() に templateを渡します

Page 38: はじめてのPython

import webapp2

template = u'''<!doctype html><html><head><title>ゲストブック</title></head><body><h1>ゲストブック</h1><form method="post"><label>お名前<input type="text" name="name"></label><br><label>メッセージ<input type="text" name="message"></label><br><input type="submit" value="書き込む"></form></body></html>'''

class MainHandler(webapp2.RequestHandler): def get(self): self.response.write(template)

app = webapp2.WSGIApplication([ ('/', MainHandler)], debug=True)

Page 39: はじめてのPython

ブラウザをリロードすると、こんな画面が表示されます。

[書き込み]ボタンを押すと怒られます

MainHandlerクラスに、post関数を追加します。(とりあえず get と同じにしておきます )

class MainHandler(webapp2.RequestHandler): def get(self): self.response.write(template) def post(self): self.response.write(template)

Page 40: はじめてのPython

入力内容を表示してみる

postしたときに、フォームの内容を表示するようにしてみます。

postしたフォームの内容は、

self.request.POST['名前']

で取得出来ます。

templateをフォームの内容を表示する前の部分と、後ろの部分に分割

Page 41: はじめてのPython

import webapp2

template1 = u'''<!doctype html><html>省略<input type="submit" value="書き込む"></form>'''

template2 = u'''</body></html>'''

class MainHandler(webapp2.RequestHandler): def get(self): self.response.write(template1) self.response.write(template2) def post(self): self.response.write(template1) name = self.request.POST['name'] message = self.request.POST['message'] append = "%s : %s" % (name, message) self.response.write(append) self.response.write(template2)

app = webapp2.WSGIApplication([ ('/', MainHandler)], debug=True)

Page 42: はじめてのPython

import webapp2

template1 = u'''<!doctype html><html>省略<input type="submit" value="書き込む"></form>'''

template2 = u'''</body></html>'''

class MainHandler(webapp2.RequestHandler): def get(self): self.response.write(template1) self.response.write(template2) def post(self): self.response.write(template1) name = self.request.POST['name'] message = self.request.POST['message'] append = "%s : %s" % (name, message) self.response.write(append) self.response.write(template2)

app = webapp2.WSGIApplication([ ('/', MainHandler)], debug=True)

Page 43: はじめてのPython

保存してみる

データを保存するためのクラスを定義します。

from google.appengine.ext import db

class Greeting(db.Model): author = db.StringProperty() message = db.StringProperty(multiline=True) date = db.DateTimeProperty(auto_now_add=True)

postした時に、Greetingオブジェクトを保存するようにします

greeting = Greeting() greeting.author = name greeting.message = message greeting.put()

Page 44: はじめてのPython

管理画面

http://localhost:8000/ にアクセスすると、管理画面が表示されます。

Datastore Viewerを開くと、データの登録状況が確認できます。

Page 45: はじめてのPython

保存内容を表示する

def render(self): self.response.write(template1) greetings = db.GqlQuery("SELECT * FROM Greeting") for greeting in greetings: self.response.write( '%s : %s<br>' % (cgi.escape(greeting.author), cgi.escape(greeting.message)) ) self.response.write(template2)

getでもpostでも表示できるように、render関数を追加してみます

データの取得は、db.GqlQueryで行えます

Page 46: はじめてのPython

def get(self): self.render() def post(self): name = self.request.POST['name'] message = self.request.POST['message'] greeting = Greeting() greeting.author = name greeting.message = message greeting.put() self.render()

getとpostから、render関数を呼ぶように変更します。

Page 47: はじめてのPython

今日はここまで!

おつかれさまでした�