Windows Azure Cloud ServiceでPython/Djangoを使おう!

Windows Azure Advent Calendar 2013 12月3日分の記事です。

さて、昨年のWindows Azure Advent Calendar 2012での私の記事は、Python Tools for Visual Studio 1.5を用いて、Azure Web SiteにDjangoのアプリケーションをデプロイする物でしたが、今回は、Python Tools for Visual Studioが2.0になったこともあり、情報のアップデートをかねて、Visual Studio 2013 + Python Tools for Visual Studio 2.0(PTVS)をつかって、DjangoのアプリケーションをAzureのクラウドサービスにデプロイしたいと思います。

Python Tools for Visual Studio 2.0について

PTVSはVisual StudioでPython/IronPythonの開発を可能にするための、Visual Studioのアドインで、主に以下のような機能を提供します。

など。

PTVSはVS2012,2013向けに公開されており、Visual Studio Shellを用いた完全無償版もあります。

また、ダウンロードはWeb Platform Installerを使用するか、以下よりダウンロードして下さい。

http://pytools.codeplex.com/releases/view/103102

Visual Studio 2013を使用している場合には、新規作成-プロジェクトでPythonを選択すると、PTVSをダウンロードしてインストールするための項目があり、そこからダウンロード/インストールが可能です。

クラウドサービスにデプロイするためにはAzure SDK 2.2以降が必要なるので、インストールされていない場合にはWeb Platform Installerを使ってインストールして下さい。

Dajngoアプリケーションの作成

それでは、Djangoアプリケーションを作成します。ここでは、MyFirstDjangoApplication20131203と言うプロジェクト名にします。

まずはDjangoのプロジェクトを作成します。

SnapCrab_新しいプロジェクト_2013-12-1_21-45-32_No-00

次に、Python Environmentを選択して右クリックして、コンテキストメニューよりAdd Virtual Environmentを選択します。(2.0よりVirtual Env.に対応したのです。)

SnapCrab_MyFirstDjangoApplication20131203 - Microsoft Visual Studio_2013-12-1_21-48-11_No-00_01

デフォルトのままenvとし追加します。

SnapCrab_Add Virtual Environment_2013-12-1_21-48-20_No-00

追加したenvを右クリックして、コンテキストメニューよりInstall Python Packageを選択します。

SnapCrab_Install Python Package_2013-12-1_21-50-41_No-00

pipのままテキストボックスに’django’と入力して、djangoのインストールを行います。

SnapCrab_MyFirstDjangoApplication20131203 - Microsoft Visual Studio_2013-12-1_21-52-10_No-00_01

出力ウインドウにインストールの状態が表示されます。

同様に’azure’も追加します。

ToDoアプリケーションの作成

次にアプリケーションですが、今回はめんどくさいのでAzureサイトにある、テーブルストレージ使用のためのサンプルを使用します。ついては、アプリケーションの詳細については以下をご覧下さい。

テーブル ストレージを使用する Python Web アプリケーション

ただし、このページのままだと、プログラムが動作しないし、新しいPTVSに対応していないため、PTVS 2.0向けにアレンジし、以下に正しく動作するようにした手順とコードを記述します。

また、Azure ストレージサービスのTebleを使用数rのであらかじめストレージサービスで新規にストレージを作成して、アカウント名とキーを入手しておいて下さい。

プロジェクトのルートを選択して、右クリックし、コンテ機器ストメニューの追加を選択、そのサブメニューのDjango Appを選択します。

次のようなウインドウが表示されるので、ToDoと言う名前でアプリケーションを追加します。

SnapCrab_Add Django App_2013-12-1_22-6-31_No-00

以下が、追加された状態です。

SnapCrab_NoName_2013-12-1_22-17-25_No-00

次に、テンプレートが検索できるように、MyFirstDjangoApplication20131203フォルダの下にあるsetting.pyを開き、INSTALLED_APPSにToDoを追加します。

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    # 'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'ToDo',
)

ToDoフォルダしたのview.pyを以下のように変更します。

from django.http import HttpResponse
from django.template.loader import render_to_string
from azure.storage import *

account_name = 'あなたのアカウント名'
account_key = 'あなたのキー'
table_service = TableService(account_name=account_name, account_key=account_key);
table_service.create_table('mytasks')

def list_tasks(request):      
    entities = table_service.query_entities('mytasks', '', 'name,category,date,complete')         
    html = render_to_string('index.html', {'entities':entities})     
    return HttpResponse(html)


def add_task(request):     
    name = request.GET['name']     
    category = request.GET['category']     
    date = request.GET['date']     
    table_service.insert_entity('mytasks', {'PartitionKey':name+category, 'RowKey':date, 'name':name, 'category':category, 'date':date, 'complete':'No'})     
    entities = table_service.query_entities('mytasks', '', 'name,category,date,complete')     
    html = render_to_string('index.html', {'entities':entities})     
    return HttpResponse(html)

def update_task(request):     
    name = request.GET['name']     
    category = request.GET['category']     
    date = request.GET['date']     
    partition_key = name + category     
    row_key = date     
    table_service.update_entity('mytasks', partition_key, row_key, {'PartitionKey':partition_key, 'RowKey':row_key, 'name': name, 'category':category, 'date':date, 'complete':'Yes'})     
    entities = table_service.query_entities('mytasks', '', 'name,category,date,complete')         
    html = render_to_string('index.html', {'entities':entities})     
    return HttpResponse(html)

ToDo/Template下のindex.htmlを以下のように変更します。


    
        
         
    
        

My Tasks


{% for entity in entities %} {% endfor %}
Name Category Date Complete Action
{{entity.name}} {{entity.category}} {{entity.date}} {{entity.complete}}


Name:
Category:
Item Date:

以上でToDoアプリケーションの準備が出来ましたので、アプリケーションへルーティングされるようにurls.pyを以下のように編集します。

from django.conf.urls import patterns, include, url

# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()

urlpatterns = patterns('',
    url(r'^$', 'ToDo.views.list_tasks'),
    url(r'^list_tasks$', 'ToDo.views.list_tasks'),
    url(r'^add_task$', 'ToDo.views.add_task'),
    url(r'^update_task$', 'ToDo.views.update_task'),

)

ここで、一度ローカルで動作確認をします。

Cloud Serviceへのデプロイ

Visual Studioが管理者権限で動作していない場合には、一度終了して管理者権限で起動します。

Visual Studioが管理者権限で起動し、今回のプロジェクトを開いたら、プロジェクトをクラウドサービスのプロジェクトに変更します。

プロジェクトのルートを右クリックしてコンテキストメニューを開いたら、以下のように変換→Windows Azure クラウドサービスに変換を選択します。

SnapCrab_MyFirstDjangoApplication20131203 - Microsoft Visual Studio (管理者)_2013-12-1_23-7-18_No-00_01

Azureのプロジェクトが追加されます。

SnapCrab_NoName_2013-12-1_23-11-32_No-00

ここで一度、ソリューションでビルドし、デバッグ実行(F5)して、ローカルのAzureエミュレータで動作することを確認します。

エミュレータ上で問題無く動作したなら、Azure クラウドサービスにデプロイしましょう。

プロジェクトのルートを右クリックしてコンテキストメニューを開いたら、以下のようにWindows Azureに発行を選択します。

SnapCrab_MyFirstDjangoApplication20131203 - Microsoft Visual Studio (管理者)_2013-12-1_23-14-32_No-00_01

Windows Azure発行サインインが起動するので、まずサブスクリプションを選択します。

SnapCrab_Windows Azure アプリケーションの発行_2013-12-1_23-17-59_No-00

次に、サービスの名前と、サービスを展開するデータcエンターのロケーションを選択します。

SnapCrab_Windows Azure サービスの作成_2013-12-1_23-18-23_No-00

設定を確認して、次へをクリック。

SnapCrab_Windows Azure アプリケーションの発行_2013-12-1_23-18-52_No-00

概要をもう一度確認し、発行をクリックすれば実際にデプロイが開始されます。

SnapCrab_Windows Azure アプリケーションの発行_2013-12-1_23-19-15_No-00

デプロイ中の様子。

SnapCrab_NoName_2013-12-1_23-24-24_No-00

デプロイ完了。

SnapCrab_NoName_2013-12-1_23-39-11_No-00

以下のようにアプリケーションが動作します。

SnapCrab_httpadvent2013cloudappnet - Internet Explorer_2013-12-2_0-21-38_No-00

まとめ

  • Python Tools for Visual Studio 2.0は1.5よりより使いやすくなっているので更新しましょう。
  • クラウドサービスの利用も特に問題ありません。.NETのデプロイとあまり大きくは変わりません。
  • Pythonの事も忘れないで下さい。

さて、明日は@kunyamiさんです。ではハリキッテどうぞ!!

※ここで立ち上げたサービスは近日中になくなります。

ソースコード: https://github.com/ishisaka/AzureAdventCal2013

One thought on “Windows Azure Cloud ServiceでPython/Djangoを使おう!”

コメントを残す

This site uses Akismet to reduce spam. Learn how your comment data is processed.