2016-10-14 55 views
0

我是Django1.10 Python的新手。在Django python中提供web服務時遇到麻煩android

我必須爲應用程序提供Web服務。所以我在python的Django框架中創建了一個web服務。網絡服務適用於iOS,但在使用android時遇到問題。用於處理android中的Web服務,使用Volley庫。

以下錯誤發生: - Error Code 500 Internal Server Error

因此無法發佈爲Android端數據...

對於Web服務我使用下面的代碼: -

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) 

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) 

編輯: 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服務工作正常進行iOS

所以,我應該在哪裏改進我的代碼...?

感謝提前:)

編輯:

我的Android開發者試圖

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

而不是JSON數組發送它以JSON對象的方式發送數據(鍵:值)的方式

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

我該如何取數據發送object表格在...

三江源

回答

0
  1. 確保在你的「request.body」,你越來越具有所有的u訪問below.Because,如果你的「數據」變量不要密鑰的正確的字典有任何你在下面訪問的密鑰,它會引發keyerror,你沒有在你的代碼中處理keyerror。

如果以上不工作,然後告訴我你的models.py

+0

我接着說:models.py'文件...謝謝...我已經提到了相同的代碼工作'iOS' ,並且還給出了適用於Android的'ARC'唯一問題的適當迴應... @ Akas –

+0

模型似乎沒問題。 iOS,ARC和Android客戶端是三種不同的東西。所有客戶都通過'request.body'向您發送數據。所以,我說如果你可以在你的本地服務器上打印你的'request.body',那麼你將會知道request.body中的數據是否正確地得到了正確的安裝, –

+0

好吧,沒有從android端獲取數據...當我的 –