如何使用角度前端将图像作为输入发送到django视图?

问题描述 投票:-1回答:1

我有一个带角度前端的现有django web api,使用它我可以上传图像并显示给用户。现在我想扩展它。点击按钮“段”(see image)它应该将相应的图像传递给我的python后端的脚本,对图像进行一些处理。

我在主应用程序的views.py文件中有我的python脚本,这是这样的事情:

from django.shortcuts import render

def segment_image(request):
  if request.method == 'GET':
    form = segment_form()
  else:
    if form.is_valid():
      info = request.POST['info_name']
      output = script_function(info)
      ''' Here i am  calling script_function,passing the POST data info to it'''
      return render(request, 'your_app/your_template.html', {
        'output': output,
      })
  return render(request, 'your_app/your_template.html', {
    'form': form,
  })
'''here info is our image in some format'''

def script_function(info):
    ...
'''here goes my mian logic to process the image.'''
    ...
    return x,y,w,h

我从未使用过角度输入图像,我不知道如何使用angularjs将图像路由到我的视图。现在我如何在app.js文件中实现这个segmentImage()函数,以便函数调用相应的视图将此图像作为POST参数传递。

下面是我的index.html文件。

<!DOCTYPE html>
<html lang="en-US">
<head>
    <meta charset="utf-8">
    <!-- Include Angular and several angular libraries -->
    <script src="node_modules/angular/angular.min.js"></script>
    <script src="node_modules/angular-resource/angular-resource.min.js"></script>

    <!-- Include our app -->
    <script src="js/app.js"></script>
    <!-- Include our own controllers, factories, directives, etc... -->
    <script src="js/filesModelDirective.js"></script>
    <script src="js/images.rest.js"></script>
    <!-- Include Bootstrap CSS -->
    <link rel="stylesheet" href="node_modules/bootstrap/dist/css/bootstrap.min.css">
</head>
<body>

<!-- Main Division -->
<div class="container-fluid">
    <div ng-app="imageuploadFrontendApp" ng-controller="MainCtrl">
        <!-- Panel for Uploading a new Image -->
        <div class="panel panel-default">
            <div class="panel-body">
                <form class="form" name="form" ng-submit="uploadImage()">
                    <label for="inputFile">Select Image:</label>
                    <input id="inputFile" type="file" files-model="newImage.image">
                    <br />
                    <button class="btn btn-default" type="submit">
                        Upload
                    </button>
                    <br />
                </form>
            </div>
        </div>
        <div ng-if="images.length == 0">
            There are no images available yet.
        </div>
        <div class="row">
            <div class="col-xs-12 col-sm-12 col-md-6 col-lg-4" ng-repeat="image in images track by image.pk">
                <h3>
                    Image {{ image.pk }}
                    <button class="btn btn-warning" ng-click="deleteImage(image)">Delete</button>
                    <button class="btn btn-primary" ng-click="segmentImage(image)">Segment</button>
                </h3>
                <a href="{{ image.image }}">
                    <img class="img-responsive" ng-src="{{ image.image }}">
                </a>
            </div>
        </div>
    </div>
</div>

</body>
</html>

下面是我的app.js文件:

// create a module called imageuploadFrontendApp, which relies on ngResource
var myApp = angular.module('imageuploadFrontendApp', ['ngResource']);

// Configure ngResource to always use trailing slashes (required for django)
myApp.config(function($resourceProvider) {
  $resourceProvider.defaults.stripTrailingSlashes = false;
});

// Main Controller
myApp.controller('MainCtrl', function($scope, Images)
{
    console.log('In main Control');
    $scope.images = Images.query();

    $scope.newImage = {};

    $scope.uploadImage = function()
    {
        // call REST API endpoint
        Images.save($scope.newImage).$promise.then(
            function(response) {
                // the response is a valid image, put it at the front of the images array
                $scope.images.unshift(response);
            },
            function(rejection) {
                console.log('Failed to upload image');
                console.log(rejection);
            }
        );
    };

    $scope.deleteImage = function(image)
    {
        image.$delete(
            function(response)
            {
                // success delete
                console.log('Deleted it');
                // update $scope.images
                $scope.images = Images.query();
            },
            function(rejection)
            {
                console.log('Failed to delete image');
                console.log(rejection);
            }
        );
    };
});
javascript python angularjs django
1个回答
0
投票

你可以尝试这样的事情

为您的视图功能定义一个URL

URLs.朋友

url(r'^image/script_function/$', script_function, name="script_function")

编写url script_function的视图

views.朋友

def script_function(info):
    ...
    '''here goes my mian logic to process the image.'''
    ...
    return x,y,w,h

app.js

$scope.segmentImage = function(image){
    $http({method:'POST', url:'https://127.0.0.1/image/script_function/', data:{'image': image}}).
        then(function successCallback(response) {
            console.log('Image Posted successfully')
        },function errorCallback(response) {
            console.log('Image Post failed')
        }
    });
};

通过发布将图像传递到服务器并处理您的图像。

© www.soinside.com 2019 - 2024. All rights reserved.