在Django中上传和显示图像

时间:2018-08-07 09:09:42

标签: django python-3.x

我目前正在学习Django。我正在构建一个系统,该系统从用户那里获取输入作为图像并返回损坏程度。我把所有的python文件都赶上了。但是我在执行Django部分时遇到困难。

如何从用户那里获取图像作为输入?

我该如何将对损坏程度进行预测的代码的结果放回前端?

预先感谢

1 个答案:

答案 0 :(得分:0)

要从用户那里获取图像,您可以执行以下操作。但是,不建议从请求中获取数据。

Views.py

from django.shortcuts import render, render_to_response
from django.core.files.storage import FileSystemStorage


def index(request):
    if request.POST:

        if request.method == 'POST' and request.FILES['image']:
            uploaded_image = request.FILES['image']
            fs = FileSystemStorage()
            filename = fs.save(uploaded_image.name, uploaded_image)
            uploaded_file_url = fs.url(filename)
            code = get_code(uploaded_file_url)
            return render_to_response("homepage.html", {"code": code})

    else:
        return render(request, "homepage.html")

使用此request.FILES['image'],我们可以从事件后传递的表单中获取图像。

在您的模板 homepage.html

<form method="post" action="{% url 'code' %}" enctype="multipart/form-data">
            {% csrf_token %}
            <input type="file" name="image" id="file-input" accept="image/x-png,image/jpeg,image/jpg"/>


            <input type="submit" style="background: #0b0b0b" class="btn btn-secondary" value="Generate Caption"/>
            <br><br>
            <div style="background: #0b0b0b">
                <a>Code for image is : {{ code }}</a>
            </div>
        </form>

{% url 'code' %},这将按照urls.py中定义的名称反转url。出于安全原因,{% csrf_token %}是必需的。需要enctype="multipart/form-data"来传递图像,文件等数据。名称为name="image"的输入就是我们在request.FILES['image']中寻找的内容。如果要更改名称,请在任何地方进行更改。

并在您的 urls.py

from django.conf.urls import url
urlpatterns = [
   url(r'^$', views.homepage, name='code'),  
]

另外,您可以查看Django forms,以寻求更好的方法。