【问题标题】:"POST /receiver/ HTTP/1.1" 500 137512“POST /receiver/HTTP/1.1”500 137512
【发布时间】:2014-02-24 08:20:49
【问题描述】:

服务器端 - 使用 Django 框架进行 Python 编程:

views.py

from django.http import HttpResponse
from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
import django.utils.simplejson as json

@csrf_exempt
def rcvr(request):
    if request.method=='POST':  
        objs = request.POST.get['username']
        return render(request, "post.html",{'username': username})
    else:
        return HttpResponse("Failure...")

urls.py

from django.conf.urls import patterns, include, url
from django.contrib import admin
from receiver import views
admin.autodiscover()
urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'woodpecker.views.home', name='home'),
    # url(r'^woodpecker/', include('woodpecker.foo.urls')),
    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),
    url(r'^receiver/', views.rcvr, name='rcvr'),
)

rcvr.html

<html>
    <head></head>
    <body>        
        <form action="{% url 'woodpecker.receiver.views.rcvr' %}" method="post">{% csrf_token %}
            <input type="text" name="username">
            <input type="submit" id="click1" value="username">
        </form>
    </body>
</html>

客户端 - Android 应用程序

package com.example.postjson;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpResponse;
import org.apache.http.client.*;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONObject;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;

public class MainActivity extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        HttpClient httpclient = new DefaultHttpClient();         
        try{
            HttpPost post = new HttpPost("http://10.0.2.2:8000/receiver/");
            post.setHeader("Content-type", "application/json");
            post.setHeader("Accept","application/json");
            JSONObject obj=new JSONObject();
            obj.put("username", "abcd");
            obj.put("password","1234");
            post.setEntity(new StringEntity(obj.toString(),"UTF-8"));
            System.out.println("Yo...Yo...!! B-) ");             

            HttpResponse response = httpclient.execute(post);

            }catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }catch (ClientProtocolException e) {
                e.printStackTrace();
            }catch (IOException e) {
                e.printStackTrace();
            }catch(NullPointerException e){
                e.printStackTrace();
            }catch(Exception e){
                e.printStackTrace();
            }
        }

    @Override
    public boolean onCreateOptionsMenu(Menu menu){
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

每当我从模拟器运行我的应用程序时,我都会收到 500 错误...

[root@vivek-vaio woodpecker]# python manage.py runserver
Validating models...

0 errors found
January 31, 2014 - 20:04:54
Django version 1.5.4, using settings 'woodpecker.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
[31/Jan/2014 20:04:57] "GET /receiver/ HTTP/1.1" 200 10
[01/Feb/2014 09:55:21] "POST /receiver/ HTTP/1.1" 500 137512
Internal Server Error: /receiver/
Traceback (most recent call last):
    File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py", line 115, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
    File "/usr/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 77, in  wrapped_view
    return view_func(*args, **kwargs)
    File "/home/vivek/PROJECT/Server_Work/woodpecker/receiver/views.py", line 21, in rcvr
    return render(request, "rcvr.html",{'username': objs})
    File "/usr/lib/python2.7/site-packages/django/shortcuts/__init__.py", line 53, in render
    return HttpResponse(loader.render_to_string(*args, **kwargs),
    File "/usr/lib/python2.7/site-packages/django/template/loader.py", line 177, in render_to_string
    return t.render(context_instance)
    File "/usr/lib/python2.7/site-packages/django/template/base.py", line 140, in render
    return self._render(context)
    File "/usr/lib/python2.7/site-packages/django/template/base.py", line 134, in _render
    return self.nodelist.render(context)
    File "/usr/lib/python2.7/site-packages/django/template/base.py", line 830, in render
    bit = self.render_node(node, context)
    File "/usr/lib/python2.7/site-packages/django/template/debug.py", line 74, in render_node
    return node.render(context)
    File "/usr/lib/python2.7/site-packages/django/template/defaulttags.py", line 404, in render
    raise NoReverseMatch("'url' requires a non-empty first argument. "
    NoReverseMatch: 'url' requires a non-empty first argument. The syntax changed in Django 1.5, see the docs.
[01/Feb/2014 09:55:33] "POST /receiver/ HTTP/1.1" 500 137512

谁能帮帮我??有 500 错误???

【问题讨论】:

  • 您解决问题了吗?在这种情况下,如果您能用问题和解决方案来回答问题,那就太好了。

标签: android python json django


【解决方案1】:

HTTP 500 错误表明代码中存在一些运行时错误。 我发现了错误! JSON 数据总是在请求组件的 body 中。 行号9已更新,错误已成功排除。

from django.http import HttpResponse
from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
import django.utils.simplejson as json

@csrf_exempt
def rcvr(request):
    if request.method=='POST':
        data = json.loads(request.body.decode(encoding='UTF-8'))
        if data != None:
            username = data['username']
            return HttpResponse(username)
        else:
            return HttpResponse("Nothing was received!")
    else:
        return HttpResponse("POST Error!")

【讨论】:

    【解决方案2】:

    您的视图中缺少一些完全启用 CSRF 的步骤。我假设 CSRF 是问题所在,因为如果未正确启用它会抛出 403。

    https://docs.djangoproject.com/en/dev/ref/contrib/csrf/

    【讨论】:

    • 好的,谢谢...我得到了问题...我解决了 403 错误...正如你所说,我错过了一些步骤..!!!但是,现在我收到 500 错误...你能帮我解决这个问题吗...问题已被编辑!!!
    猜你喜欢
    • 1970-01-01
    • 2013-09-08
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多