IBM Bluemix KinetiseでMobile Applicaiton開発(2)

[前回](http://qiita.com/yoshiono/items/3fef1c6bb1ba6abe3c27)からの続きで、Pythonのコード修正、POSTMANで動作確認について説明します。

**2. Pythonのコード修正**
2.1. kinetise\settings.pyを修正します。以下、修正箇所の抜粋です。基本的には、Kinetiseヘルプセンターの[Starter SDKs](https://helpcenter.kinetise.com/backend-developers)の記述に従うのですが、Webサイトの内容を単純にコピーするとシングルクォートが全角になっていてエラーの原因になっていたりするので注意してください。

```py:setting.pyの抜粋
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'comments',
    'rest_framework',
]
REST_FRAMEWORK = {
    # Use Django's standard `django.contrib.auth` permissions,
    # or allow read-only access for unauthenticated users.
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ],
        'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
        'rf_alter_api.renderers.AlterAPIRenderer'
    ],
    'DEFAULT_PARSER_CLASSES': [
        'rf_alter_api.parsers.AlterAPIParser',
    ],
    'DEFAULT_AUTHENTICATION_CLASSES': [],
    'DEFAULT_PERMISSION_CLASSES': [],
        'EXCEPTION_HANDLER': 'rf_alter_api.views.alter_api_exception_handler',}
```
2.2. 仮想環境(env3)のコマンドプロンプトで python manage.py createsuperuserを実行します。以下、コマンドのログです。BluemixのPythonランタイムはOSログイン不可なので、このコマンドを実行することはできませんし、パスワードを引数にすることができないのでシェルに組み込むことも難しいです。従って、この作業で作成した管理者ユーザーは、BluemixのPythonランタイムで、そのまま使用されることになります。

```text:コマンドのログ
(env3) C:\Users\hoge\workspace_env3\kinetise>python manage.py createsuperuser --username any --email any@any.com
Password:
Password (again):
Superuser created successfully.

(env3) C:\Users\hoge\workspace_env3\kinetise>
```
2.3. kinetise\commnets\models.pyにCommentというModelクラスを記述します。以下、記述箇所の抜粋です。

```py:models.pyの抜粋
class Comment(models.Model):
    author = models.CharField('Author', max_length=64)
    message = models.CharField('Message', max_length=1024)
    pub_date = models.DateTimeField('Date published', auto_now_add=True)
    def __str__(self):
        return self.author + ": " + self.message
```

Mobile Applicationに提供するJSONの要素を増やしたい場合は、Commentクラスに追記します。戻り値はadmin画面の行のラベルに使用するためですので、本質的には記述する必要はありません。以下の例では、message2という要素を追加しています。

```py:models.pyの抜粋
class Comment(models.Model):
    author = models.CharField('Author', max_length=64)
    message = models.CharField('Message', max_length=1024)
    pub_date = models.DateTimeField('Date published', auto_now_add=True)
    message2 = models.CharField('Message2', max_length=1024)
    def __str__(self):
        return self.author + ": " + self.message + ": " + self.message2
```
2.4. kinetise\urls.pyにurlとビューの関連付けを記述します。KinetiseヘルプセンターのStarter SDKsの記述に従うのですが、上記2.3.のようにJSONの要素(message2)を追加した場合は、明示的にfieldsに追記します。以下は、修正箇所の抜粋です。

```py:urls.pyの抜粋
class CommentsSerializer(AlterAPISerializer):
    context = serializers.SerializerMethodField()
    class Meta:
        model = Comment
        fields = ('context', 'author', 'message', "pub_date", 'message2',)
```
2.5. comments\admin.pyをKinetiseヘルプセンターのStarter SDKsの記述に従って記述します。

2.6. kinetiseプロジェクトを右クリック、manage.py makemigrations commentsとmanage.py migrateを実行します。なお、Commentがsqlite3に、どの様に実装されているかを以下のコマンドで念のために確認します。これは、正常動作しない場合のエラー出力を理解する際の、助けになるかもしれません。

```コマンドのログ
(env3) C:\Users\hoge\workspace_env3\kinetise>python manage.py sqlmigrate comments 0001
BEGIN;
--
-- Create model Comment
--
CREATE TABLE "comments_comment" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "author" varchar(64) NOT NULL, "message" varchar(1024) NOT NULL, "pub_date" datetime NOT NULL, "message2" varchar(1024) NOT NULL);
COMMIT;

(env3) C:\Users\hoge\workspace_env3\kinetise>
```
2.7. Eclipseからmanage.py runserver --noreloadを実行します。エラーが発生したら、ここまでの手順を見直してください。![qiita投稿kinetise起動.png](https://qiita-image-store.s3.amazonaws.com/0/104507/6f0110c9-59e0-7ec9-a315-3381a985a0d8.png)

**3. POSTMANで動作確認**
3.1. POSTMANを使用してGETとPOSTの動作を確認します。POSTについては、URLを```http://127.0.0.1:8000/comments/```に指定し、BODYでrawとjson指定してSendし、Statusが200 OKならば正常動作しています。
![qiita投稿POSTでPOSTMAN.png](https://qiita-image-store.s3.amazonaws.com/0/104507/c5daa54b-3121-2283-6652-8e4e3ebebf93.png)

GETについては、POST同様のURLを指定し、Statusが200 OKならば正常動作しています。
![qiita投稿GETでPOSTMAN.png](https://qiita-image-store.s3.amazonaws.com/0/104507/559e78e3-07da-ca7b-4684-04c90da8846d.png)
(補足)　正常動作しない場合は、今までの作業を見直すしかないのですが、ブラウザで```http://127.0.0.1:8000/admin/```や```http://127.0.0.1:8000/comments/```にアクセスしたり、Eclipseのコンソール出力を確認することも手助けになります。

これで、Pythonのコード修正、POSTMANで動作確認についての説明は終了です。次は[BluemixのPythonランタイムへのデプロイ](http://qiita.com/yoshiono/items/2fb5a4505e3561458854)を説明します。