3

だから、私は解決策を見つけることができない問題を抱えています。フロントエンドがangular-jsでなければならないDjangoを使用してアプリケーションを開発しています。フォームをレンダリングし、フォームからデータを投稿できるようになりましたが、これらのフォームを使用してファイルをアップロードする方法がわかりません。

これは私のコードです:

urls.pyで

url(r'^getter/$', TemplateView.as_view(template_name = "upload.html"))
url(r'^getter/test/', views.test, name = "thanks.html")

views.pyで

def test(request):
   upload_form = uploadform(request.POST, request.FILES)
   data = json.loads(request.body)
   file_path = data.path

forms.py で

select_file = forms.FileField(label = "Choose File")

コントローラー内のjsファイルで

myapp.controller('abc', function ($scope, $http)
$scope.submit = function(){
var file = document.getElementById('id_select_file').value
var json = {file : string(file)}
$http.post('test/',json)
...success fn....
...error fn...

}; });

今問題は、私の見解では、もしそうなら

f = request.FILES['select_file']

エラー「select_file」が MultiValueDict に見つかりません: {}

おそらく問題は、投稿リクエストを送信する方法がすべてのメタデータを送信していないことです....これで私を助けてください。私は一日中解決策を探していましたが、役に立ちませんでした。

PS: 一部の制限ポリシーでは Djangular を使用できないため、djangular を使用しないソリューションを教えてください。ありがとう

編集:**サーバーが受信しているjsonにファイルプロパティを適用しても機能しません**

4

4 に答える 4

1

以下のスニペットを使用して、ファイル データとともに通常のデータを angular から django に送信できるようにします。

$scope.submit = function(){
    var fd = new FormData();
    datas = $("#FormId").serializeArray();
    // send other data in the form
    for( var i = 0; i < datas.length; i++ ) {
         fd.append(datas[i].name, datas[i].value);
        };
    // append file to FormData
    fd.append("select_file", $("#id_select_file")[0].files[0])
    // for sending manual values
    fd.append("type", "edit");
    url = "getter/test/",
    $http.post(url, fd, {
        headers: {'Content-Type': undefined },
        transformRequest: angular.identity
    }).success(function(data, status, headers, config) {
        // this callback will be called asynchronously
        // when the response is available
    }).
    error(function(data, status, headers, config) {
        // called asynchronously if an error occurs
        // or server returns response with an error status.
        });
};

これで、django ビュー内select_filerequest.FILES他のデータを取得できます。request.POST

于 2015-04-14T13:43:51.707 に答える