2016-11-16 1 views
1

私はTastypieログインシステムを動作させようとしていますが、ユーザーデータを使ってjsonリクエストを送信すると、サーバーはHttp 500で応答します。問題をデバッグするには何もしないでください。TastypieログインでHttpResonseが返される500

私は周りを見回して私を助けるものを見つけることができません。

この問題を修正する方法や、何かがある場合は私がそうでないと誰も知りません。

ありがとうございました。

api.py

class UserResource(ModelResource): 
    raw_password = fields.CharField(attribute=None, readonly=True, null=True, blank=True) 

    class Meta: 
     queryset = User.objects.all() 
     fields = ['first_name', 'last_name', 'email'] 
     allowed_methods = ['get', 'post' ] 
     resource_name = 'user' 

    def prepend_urls(self): 
     return [ 
      url(r"^(?P<resource_name>%s)/login%s$" % 
       (self._meta.resource_name, trailing_slash()), 
       self.wrap_view("login"), name="api_login"), 
      url(r'^(?P<resource_name>%s)/logout%s$' % 
       (self._meta.resource_name, trailing_slash()), 
       self.wrap_view("logout"), name="api_logout"), 
     ] 

    def login(self, request, **kwargs): 
     self.method_check(request, allowed=['post']) 

     data = self.deserialize(request, request.raw_post_data, format=request.META.get('CONTENT_TYPE', 'application/json')) 

     username = data.get('username', '') 
     password = data.get('password', '') 

     user = authenticate(username=username, password=password) 
     if user: 
      if user.is_active: 
       login(request, user) 
       return self.create_response(request, { 
        'success': True 
       }) 
      else: 
       return self.create_response(request, { 
        'success': False, 
        'reason': 'disabled', 
       }, HttpUnauthorized) 
     else: 
      return self.create_response(request, { 
       'success': False, 
       'reason': 'incorrect', 
      }, HttpUnauthorized) 

    def logout(self, request, **kwargs): 
     self.method_check(request, allowed=['get']) 
     if request.user and request.user.authenticated(): 
      logout(request) 
      return self.request.create_response(request, {'success': True}) 
     else: 
      return self.request.create_response(request, {'success': False}, HttpUnauthorized) 

request.py

import json 
import requests 

data = {"username" : "test", "password" : "password"} 
headers = {"content-type": "application/json"} 
url = "http://localhost:8000/api/v1/user/login/" 

response = requests.post(url, data=json.dumps(data), headers=headers) 

print response 

答えて

0

問題がrequest.raw_post_dataしていました、それは非推奨だとrequest.bodyに変更する必要があり、これは誰にも問題を抱えてのに役立ちます願っています。

+0

あなた自身の答えを受け入れるならば、それは良いだろう –

+0

私はそれは2日間私をさせません。私ができるようになると、私はします。 – geolaw

1

これを試してみてください!

api.py

class UserResource(ModelResource): 
    raw_password = fields.CharField(attribute=None, readonly=True, null=True, blank=True) 

    class Meta: 
     queryset = User.objects.all() 
     allowed_methods = ['get', 'post' ] 
     resource_name = 'user' 
     authentication = Authentication() 
     authorization = Authorization() 
     serializer = Serializer(formats=['json']) 


    def prepend_urls(self): 
     return [ 
      url(r"^(?P<resource_name>%s)/login%s$" % 
       (self._meta.resource_name, trailing_slash()), 
       self.wrap_view("login"), name="api_login"), 
      url(r'^(?P<resource_name>%s)/logout%s$' % 
       (self._meta.resource_name, trailing_slash()), 
       self.wrap_view("logout"), name="api_logout"), 
     ] 

    def login(self, request, **kwargs): 
     self.method_check(request, allowed=['post']) 
     data = self.deserialize(request, request.body, format=request.META.get('CONTENT_TYPE', 'application/json')) 
     username = data.get('username', '') 
     password = data.get('password', '') 


     user = authenticate(username=username, password=password) 
     print user 
     if user: 
      if user.is_active: 
       login(request, user) 
       return self.create_response(request, { 
        'success': True 
       }) 
      else: 
       return self.create_response(request, { 
        'success': False, 
        'reason': 'disabled', 
       }, HttpUnauthorized) 
     else: 
      return self.create_response(request, { 
       'success': False, 
       'reason': 'incorrect', 
      }, HttpUnauthorized) 


    def logout(self, request, **kwargs): 
     """ 
     Attempt to log a user out, and return success status. 
     """ 
     self.method_check(request, allowed=['get']) 

     # Run tastypie's BasicAuthentication 
     self.is_authenticated(request) 

     if request.user and request.user.is_authenticated(): 
      logout(request) 
      return self.create_response(request, { 'success': True }) 
     else: 
      return self.create_response(request, { 'success': False, 'error_message': 'You are not authenticated, %s' % request.user.is_authenticated() }) 

request.pyで

import json 
import requests 

data = {"username" : "test", "password" : "password"} 
headers = {"content-type": "application/json"} 
url = "http://localhost:8000/api/v1/user/login/" 

response = requests.post(url, data=json.dumps(data), headers=headers) 
print response 

ターミナル

In [2]: import requests 

In [3]: import json 

In [4]: data = {"username" : "test", "password" : "password"} 

In [5]: headers = {"content-type": "application/json"} 

In [6]: url= "http://localhost:8000/api/v1/user/login/" 

In [7]: response = requests.post(url, data=json.dumps(data), headers=headers) 

In [8]: response 
Out[8]: <Response [200]> 
関連する問題