【问题标题】:I need a HTML front end to test and use a Django API我需要一个 HTML 前端来测试和使用 Django API
【发布时间】:2020-08-16 17:23:30
【问题描述】:

这里是新手。我按照在线指南成功部署了一个带有 Django API 的 Keras 模型。我想创建一个连接到 Django API 的 HTML 文件,我可以在其中将图像加载到模型中进行处理,然后发回预测。

以下是 API 的代码。我需要有人指导我。

import datetime
import pickle
import json
from django.shortcuts import render
from django.http import HttpResponse
from rest_framework.decorators import api_view
from api.settings import BASE_DIR

from custom_code import image_converter

@api_view(['GET'])
def __index__function(request):
    start_time = datetime.datetime.now()
    elapsed_time = datetime.datetime.now() - start_time
    elapsed_time_ms = (elapsed_time.days * 86400000) + (elapsed_time.seconds * 1000) + (elapsed_time.microseconds / 1000)
    return_data = {
        "error" : "0",
        "message" : "Successful",
        "restime" : elapsed_time_ms
    }
    return HttpResponse(json.dumps(return_data), content_type='application/json; charset=utf-8')

@api_view(['POST','GET'])
def predict_plant_disease(request):
    try:
        if request.method == "GET" :
            return_data = {
                "error" : "0",
                "message" : "Plant Assessment System"
            }
        else:
            if request.body:
                request_data = request.data["plant_image"]
                header, image_data = request_data.split(';base64,')
                image_array, err_msg = image_converter.convert_image(image_data)
                if err_msg == None :
                    model_file = f"{BASE_DIR}/ml_files/cnn_model.pkl"
                    saved_classifier_model = pickle.load(open(model_file,'rb'))
                    prediction = saved_classifier_model.predict(image_array) 
                    label_binarizer = pickle.load(open(f"{BASE_DIR}/ml_files/label_transform.pkl",'rb'))
                    return_data = {
                        "error" : "0",
                        "data" : f"{label_binarizer.inverse_transform(prediction)[0]}"
                    }
                else :
                    return_data = {
                        "error" : "4",
                        "message" : f"Error : {err_msg}"
                    }
            else :
                return_data = {
                    "error" : "1",
                    "message" : "Request Body is empty",
                }
    except Exception as e:
        return_data = {
            "error" : "3",
            "message" : f"Error : {str(e)}",
        }
    return HttpResponse(json.dumps(return_data), content_type='application/json; charset=utf-8')

【问题讨论】:

    标签: python html django api keras


    【解决方案1】:

    如果您只需要测试您的 API,请下载 Postman 并从应用程序发出请求。这比实际编写一个完整的 HTML 脚本来测试您的 API 要容易得多。但是,如果您绝对需要通过前端应用测试您的 API,请尝试以下步骤。

    1. 您的 HTML 代码中需要一个图片上传功能。
    
    <body>
       <input type="file accept="image/png, image/jpeg"/>
    </body>
    
    
    1. 确保您的 API 请求 URL 有效
    // For example
    
    POST <site>/v1/plant-image
    
    1. 从 JS 脚本发出请求
    <script type="text/javascript">
    
        var HTTP = new XMLHttpRequest();
            HTTP.onreadystatechange = function () {
                if (HTTP.readyState === 4 && HTTP.status === 200) {
                    console.log(HTTP.responseText);
                }
            }
            HTTP.open('POST', 'https://<site>/v1/plant-image', true);
            HTTP.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
            HTTP.send();
    </script>
    
    

    由于您使用的是 DRF,因此请确保通过引发错误而不是将其作为响应返回来处理错误。这可以使错误处理更容易。

    from rest_framework.exceptions import ValidationError
    
    // some code...
    
    raise ValidationError()
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 2021-09-18
      • 2011-11-10
      相关资源
      最近更新 更多