2016-10-14 7 views
0

Django1.10 Pythonの新機能です。djangoでwebservicesを提供する際のトラブルpythonをアンドロイドに提供

私はアプリのWebサービスを提供する必要があります。だから、私はPythonのDjangoフレームワークでWebサービスを作成しました。ウェブサービスはiOSでは正常に機能していますが、処理中はandroidで問題が発生しています。アンドロイドでWebサービスを扱う場合は、Volleyライブラリを使用してください。

views.py

from django.http import HttpResponseRedirect, HttpResponse 
from django.views.decorators import csrf 
from django.views.decorators.csrf import csrf_protect, csrf_exempt 
from django.db import IntegrityError, connection 
from django.views.decorators.cache import cache_control 
from django.core.files.images import get_image_dimensions     
import json 
from json import loads, dump 
from models import Gym 


@csrf_exempt 
def gym_register_web(request): 

    data = json.loads(request.body) 
    gN = str(data['gym_name']) 
    gPh = str(data['gym_phone']) 
    gE = str(data['gym_email']) 
    gL = str(data['gym_landmark']) 
    gAdd = str(data['gym_address']) 

    exE = Gym.objects.filter(gym_email = gE) 

    if exE: 
     status = 'failed' 
     msg = 'EmailId already exist' 
     responseMsg = '{\n "status" : "'+status+'",\n "msg" : "'+msg+'"\n}' 
     return HttpResponse(responseMsg) 
    else: 
     gymI = Gym(gym_name = gN, gym_phone = gPh, gym_email = gE, gym_area = gL, gym_address = gAdd) 
     gymI.save() 
     data = Gym.objects.get(gym_email = gE) 
     status = 'success' 
     dataType = 'gym_id' 
     val = str(data.gym_id) 
     responseMsg = '{\n "status" : "'+status+'",\n "'+dataType+'" : "'+val+'"\n}' 
     return HttpResponse(responseMsg) 
- :私は次のコードを使用していたWebサービスの場合 Error Code 500 Internal Server Error

アンドロイドエンドを介してデータをポストするので、できない...

- :エラー発生後

urls.py

from django.conf.urls import url, include 
from . import views 
from django.views.decorators.csrf import csrf_protect, csrf_exempt 
admin.autodiscover() 

urlpatterns=[ 
    url(r'^gymRegister/$', views.gym_register_web), 
    ]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

EDIT: models.py

from django.db import models 
from django.contrib import admin 

class Gym(models.Model): 
    gym_id = models.AutoField(primary_key = True) 
    gym_name = models.CharField(max_length = 100, null=True,default = None) 
    gym_email = models.CharField(max_length = 100, null=True,default = None) 
    gym_phone = models.BigIntegerField(null=True,default = None) 
    gym_area = models.TextField(max_length = 255, null=True,default = None) 
    gym_address = models.TextField(max_length = 255, null=True,default = None) 
    gym_latitude = models.CharField(max_length = 100, null=True,default = None) 
    gym_longitude = models.CharField(max_length = 100, null=True,default = None) 
    gym_status = models.IntegerField(null=True,default = None) 
    gym_website = models.CharField(max_length = 255,null=True,default = None) 
    gym_ladies_special = models.IntegerField(null=True,default = None) 

私は 、所望の出力を提供するAdvance REST Client上のWebサービスをテストし、私は、Webサービスが適切にそうiOS

のために働いてもう一度思い出したいと思い、どこでコードを改善すべきですか...?事前に

感謝:)

EDIT:

{ "key1"="val1", "key2"="val2"} 

が代わりにJSON配列にそれを送信するJSONオブジェクトの方法でデータを送信しようと

私のAndroidデベロッパー(キー:値)方法

{ 
    "key1" : "val1", 
    "key2" : "val2" 
} 

objectフォームで送信されたデータを取得する方法あなたの「データ」変数いけない場合...

ありがとう

答えて

0
  1. で、あなたの「request.body」で、あなたはuはbelow.Becauseにアクセスし、すべてのキーを持って適切な辞書を取得していることを確認しますあなたが以下にアクセスしたキーがあれば、それはkeyerrorを発生させ、あなたのコードでkeyerrorを処理しませんでした。

上記の場合は、お使いのmodels.py

+0

を見せた後、働いていない私は、 'models.py'ファイル...感謝を追加しました...と私はすでに同じコードが' iOS'のために働いていることを述べましたまた、アンドロイドのARCのみの問題についても適切な回答をしてくれます... @ Akas –

+0

モデルは大丈夫です。 iOS、ARC、Androidクライアントは3つの異なるものです。すべてのクライアントがあなたに 'request.body'のデータを送ります。だから、私はあなたのローカルサーバー上のあなたのビューであなたの 'request.bodyを印刷することができれば、request.bodyのデータが正しく取得されているかどうか、またはsomethigがアンドロイドから抜けているかどうかを知るようになるでしょう。 –

+0

大丈夫、アンドロイド側からデータを取得していません... –

関連する問題