2013-07-11 160 views
0

我按照这里的说明How can I login to django using tastypie创建一个UserResource,可以用来登录到我的django用户。POST 500上的HTTP 500错误

但是,我运行代码时遇到HTTP 500错误。我试图自己调试它,但无法弄清楚。我不知道如何解决500错误。任何想法,你可以表示赞赏。

谢谢!

我的代码如下:

#####api.py 
from registration.views import register 
from tastypie.resources import ModelResource 

from tastypie.constants import ALL 


from django.contrib.auth.models import User 
from django.contrib.auth import authenticate, login, logout 
from tastypie.http import HttpUnauthorized, HttpForbidden 
from django.conf.urls.defaults import url 
from tastypie.utils import trailing_slash 

class UserResource(ModelResource): 
    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']) 
     print "reached login auth" 
     data = self.deserialize(request, request.raw_post_data, format=request.META.get('CONTENT_TYPE', 'application/json')) 

     username = data.get('username', '') 
     password = data.get('password', '') 
     print "reached login auth" 
     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', 
        }, HttpForbidden) 
     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.is_authenticated(): 
      logout(request) 
      return self.create_response(request, { 'success': True }) 
     else: 
      return self.create_response(request, { 'success': False }, HttpUnauthorized) 

########test_login.py 
import requests 
import json 
from urllib2 import urlopen 
import datetime 
import simplejson 

url = 'http://127.0.0.1:8000/api/user/login' 
data = {'username' :'[email protected]', 'password' : 'pass'} 
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} 
print json.dumps(data) 
r = requests.post(url, data=json.dumps(data), headers=headers) 
print r 

#####urls.py 
from userdetails.api import UserResource 
user_resource = UserResource() 
urlpatterns = patterns('', 
    ...... 
    (r'^api/', include(user_resource.urls)), 
    ) 
+0

什么? – KevinDTimm

+0

恩,-1。首先重新格式化您的代码示例 - 在Python中缩进_do_问题。 – Tadeck

+0

@Tadeck我在这里手动设置代码的格式,因为每次剪贴都搞砸了。现在,应该没事了 –

回答

2

当使用print语句可以提高IOErrors通过WSGI部署。尝试将它们注释掉或重定向输出。

In Django, how do I allow print statements to work with Apache WSGI?

http://blog.dscpl.com.au/2009/04/wsgi-and-printing-to-standard-output.html


附加一个斜线在你的主机上的日志

url = 'http://127.0.0.1:8000/api/user/login/' 
+0

那么,OP不应该使用'print'语句/函数,而应该依赖'logging'模块。有关'print'与'logging'的更多信息,请访问:http://stackoverflow.com/a/17553247/548696 – Tadeck