【问题标题】:HTTP 500 error on POSTPOST 上的 HTTP 500 错误
【发布时间】:2013-07-11 21:56:59
【问题描述】:

我正在按照How can I login to django using tastypie 此处的说明创建一个可用于登录我的 django 用户的 UserResource。

但是,我在运行代码时遇到了 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' :'sv3@gmail.com', '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)),
     )

【问题讨论】:

  • 主机上的日志中没有任何内容?
  • 嗯,-1。首先重新格式化您的代码示例 - 在 Python 中缩进 do 很重要。
  • @Tadeck 我在这里手动格式化代码,因为每次剪切粘贴都会弄乱它。现在应该没问题了
  • @KevinDTimm 我的 Apache 日志文件夹 /private/var/log/apache2/ 为空。我对此很陌生,如果我看错了地方,请道歉
  • @vikingosegundo 谢谢,这有助于修复它。我只是打印响应对象,而不是您通过 POST 调用此 URL 的内容,但 URL 没有以斜杠结尾,并且您设置了 APPEND_SLASH。 Django 在维护 POST 数据时无法重定向到斜杠 URL。将表单更改为指向 127.0.0.1:8000/api/user/login/(注意尾部斜杠),或在 Django 设置中设置 APPEND_SLASH=False

标签: django tastypie


【解决方案1】:

当使用 print 语句通过 WSGI 部署时会引发 IOErrors。尝试将它们注释掉或重定向输出。

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/'

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-09-15
  • 1970-01-01
  • 2020-02-04
  • 2016-07-02
  • 1970-01-01
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多