Django POST / GET,GET工作,POST不是来自MATLAB(urlread)。两者都使用django.test.client

时间:2013-05-22 15:15:20

标签: django matlab django-csrf urlread

我正在学习Django所以我设置了一个非常简单的表单/ view / url示例

  • Django Version 1.5.1
  • MATLAB版本R2012A

forms.py

from django import forms
import json

class json_input(forms.Form):

    jsonfield = forms.CharField(max_length=1024)

    def clean_jsonfield(self):
        jdata = self.cleaned_data['jsonfield']
        try:
            json_data = json.loads(jdata)
        except:
            raise forms.ValidationError("Invalid data in jsonfield")
        return jdata

views.py

from django.http import HttpResponse
from rds.forms import json_input

def testpost(request):

    if request.method == 'GET':

        form = json_input(request.GET)
        if form.is_valid():
            return HttpResponse('Were Good Get',mimetype='text/plain')

    elif request.method == 'POST':

        form = json_input(request.POST)
        if form.is_valid():
            return HttpResponse('Were Good Post',mimetype='text/plain')

    else:
        return HttpResponse('Not GET or POST.',mimetype='text/plain')

此视图已映射到 urls.py

中的网址
url(r'^test2$','rds.views.testpost'),

所以当我跳进本地机器上的python manage.py shell时,django会打开,我可以发出以下命令并得到预期的响应:

>>> from django.test.client import Client
>>> c = Client()
>>> r = c.post('/test2',{'jsonfield': '{"value":100}'})
>>> print r
Content-Type: text/plain

Were Good Post
>>> r = c.get('/test2',{'jsonfield': '{"value":100}'})
>>> print r
Content-Type: text/plain

Were Good Get

然而,当我在外部机器上跳转到MATLAB并发出以下命令时。 (注意从MATLAB执行此操作是项目要求)

json = '{"value":100}';

% GET METHOD FOR JSON FORM
[gresponse,gstatus]=urlread('http://aq-318ni07.home.ku.edu/django/test2','Get',{'jsonfield' json});

% POST METHOD FOR JSON FORM
[presponse,pstatus]=urlread('http://aq-318ni07.home.ku.edu/django/test2','Post',{'jsonfield' json});

>> gresponse
    gresponse =
    Were Good Get
>> presponse
    presponse =
         ''

我一直在寻找解决方案而且找不到任何东西。我发现这可能是CSRF的一个问题(我还在搞清楚)。任何提示或想法都会非常感激。

谢谢。

编辑:

Django通过Apache公开,这里是配置。

################################################
# Django WSGI Config
################################################

WSGIScriptAlias /django /var/django/cdp/cdp/wsgi.py
WSGIPythonPath /var/django/cdp

<Directory /var/django/cdp/cdp>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>

################################################

1 个答案:

答案 0 :(得分:0)

你是如何公开你的django应用程序的MATLAB?第一件事是检查您的访问日志,您的服务器甚至收到请求?如果错误记录中有任何内容吗?

您使用的是内置的developkment服务器吗? python manage.py runserver 0.0.0.0:8000 如果是这样,请确保您可以接受该端口上的请求

如果您通过其他服务器提供服务,我相信您必须whitelist通过MATLAB向您提出请求的IP,将其添加到ALLOWED_HOSTS