Django(PTVS)からAzureのTable ストレージを使用する方法

#Table ストレージとは
[Azure Table ストレージ サービス](https://azure.microsoft.com/ja-jp/documentation/articles/storage-python-how-to-use-table-storage/)は、大量の構造化データを格納します。
このサービスは、Azure クラウドの内部および外部からの認証された呼び出しを受け付ける **NoSQL データストア**です。
要は、外部にSQLのデータをストアできるというものです。PTVSを使った場合DjangoでSQLを使いたいという時には便利です。

#Djangoのアプリケーション作成
[こちら](https://opcdiary.net/?p=27331)の方のサイトを参考にして作成いたします。
まず、新規でDjangoアプリの作成を行います。作成方法は[こちら](http://qiita.com/saiyuki1919/items/80c51c0045852d26399d)を参考にしてください。
**Install Python Package**にてpipで**azure**のパッケージをダウンロードしてきてください。
<img width="1280" alt="azure_pip.png" src="https://qiita-image-store.s3.amazonaws.com/0/130097/b6230d2b-7472-f35e-f132-32276fb94b93.png">

##ストレージ作成
Azureの[ポータル](https://portal.azure.com/)にて
**【ストレージ アカウント】➡︎【追加】**を選択します。
基本的には**名前**の部分だけ決めて後はデフォルトの設定で大丈夫です。
また、**リソースグループ**を作成していない場合作成してください！
<img width="316" alt="ストレージ設定.png" src="https://qiita-image-store.s3.amazonaws.com/0/130097/456b4d4d-d2ab-2808-7abf-c9a220dc1462.png">

作成されると、ストレージアカウントに先ほど作成したアカウントから
**【アカウント】➡︎【アクセスキー】➡︎【ストレージアカウント/key】**
を覚えておきましょう！外部からアクセスする際に必要です。
<img width="1170" alt="アクセスキー.png" src="https://qiita-image-store.s3.amazonaws.com/0/130097/99677f6d-133d-161a-05b0-04de6cc72909.png">

##ソースコード記入
最初に紹介したサイトから参考にしました。
インポートされているazureの説明は省きますが詳しく知りたい方は[こちら](https://github.com/yuesan/azure-content-jajp/blob/master/articles/storage/storage-python-how-to-use-table-storage.md)に説明があります。

```Python:views.py
from django.http import HttpRequest
from django.template import RequestContext
from datetime import datetime

from django.http import HttpResponse
from django.template.loader import render_to_string
from azure.storage.table import TableService, Entity

account_name = 'ストレージのアカウント名'
account_key = 'key(複数ある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')
    html = render_to_string('app/test.html', {'entities':entities})     
    return HttpResponse(html)
 
 
def add_task(request):     
    name = request.GET['name']     
    category = request.GET['category']       
    table_service.insert_entity('mytasks', {'PartitionKey':name+category, 'RowKey':name, 'name':name, 'category':category})     
    entities = table_service.query_entities('mytasks', '', 'name,category')     
    html = render_to_string('app/test.html', {'entities':entities})     
    return HttpResponse(html)
 
def update_task(request):     
    name = request.GET['name']     
    category = request.GET['category']        
    partition_key = name + category     
    row_key = name     
    table_service.update_entity('mytasks', partition_key, row_key, {'PartitionKey':partition_key, 'RowKey':row_key, 'name': name, 'category':category})     
    entities = table_service.query_entities('mytasks', '', 'name,category')         
    html = render_to_string('app/test.html', {'entities':entities})     
    return HttpResponse(html)

```

```HTML:test.html
<!DOCTYPE html>
<html>
    <head>
        <title></title>
    </head>     
    <body>
        <h2>My Tasks</h2> <br>     
        <table border="1">
            <tr>
                <td>Name</td>
                <td>Category</td>
            </tr>     
            {% for entity in entities %}     
                <form action="update_task" method="GET">
                    <tr>
                        <td>{{entity.name}} <input type="hidden" name='name' value="{{entity.name}}"></td>     
                        <td>{{entity.category}} 
                            <input type="hidden" name='category' value="{{entity.category}}"></td>     
                    </tr>     
                </form>     
            {% endfor %}     
        </table>     
        <br>     
        <hr>    
        <table border="1">
            <form action="add_task" method="GET">
                <tr>
                    <td>Name:</td
                    ><td><input type="text" name="name"></input></td>
                </tr>     
                <tr>
                    <td>Category:</td>
                    <td><input type="text" name="category"></input></td>
                </tr>     
                <tr>
                    <td><input type="submit" value="add task"></input></td>
                </tr>     
            </form>     
        </table>     
    </body>     
</html>

```

```Python:urls.py
urlpatterns = [
    url(r'^$', 'app.views.list_tasks'),
    url(r'^list_tasks$', 'app.views.list_tasks'),
    url(r'^add_task$', 'app.views.add_task'),
    url(r'^update_task$', 'app.views.update_task')

```

##実行
実行を行うと**Name:**と**Category**があるので、それぞれ記入して、add taskすると**My Tasks**に値が格納されます。また、記入し直したり、Djangoを起動し直したりしても当然ですが、値は保持されます。

<img width="1031" alt="起動１.png" src="https://qiita-image-store.s3.amazonaws.com/0/130097/d6aff34d-de44-8953-cc14-07b0f517c5b4.png">
<img width="1031" alt="起動２.png" src="https://qiita-image-store.s3.amazonaws.com/0/130097/865f4424-736c-e747-d60d-34046a60e4b1.png">

#終わりに
ストレージのアカウントから実際に値が挿入されていることを確認できます。
実際にWindows内にSQLをインストールしたりするのはとても大変でめんどくさいので、すごくありがたい機能だと思うので、ぜひ試してください。