1

私はDjangoを学んでいるので、非常に単純なフォーム/ビュー/URLの例をセットアップしました

  • ジャンゴ バージョン 1.5.1
  • MATLAB バージョン R2012A

フォーム.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

ビュー.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 にマップされます

url(r'^test2$','rds.views.testpost'),

したがって、django がオンになっているローカル マシンで python manage.py シェルにジャンプすると、次のコマンドを発行して、期待どおりの応答を得ることができます。

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

################################################
4

1 に答える 1

0

MATLAB 用の django アプリをどのように公開していますか? 最初にアクセスログを確認します。サーバーはリクエストを受け取っていますか? もしそうなら、そのエラーログに何かありますか?

組み込みの開発サーバーを使用していますか? python manage.py runserver 0.0.0.0:8000 その場合は、そのポートでリクエストを受け入れることができることを確認してください

別のサーバーを介してサービスを提供している場合は、MATLAB から要求している IPをホワイトリストに追加する必要があると思います。ALLOWED_HOSTS

于 2013-05-22T15:26:43.873 に答える