【问题标题】:Using AJAX to execute a python script that takes a picture (raspberry pi)使用AJAX执行一个拍照的python脚本(树莓派)
【发布时间】:2018-09-19 04:04:05
【问题描述】:

我正在做一个项目,我需要为此构建一个允许与 Raspberry Pi 相机交互的 Web 界面。我在后端使用 Django 和 python。我希望能够在 Web 界面上按下一个按钮,该按钮将执行 python 脚本以使用 pi 相机拍照。我想我需要使用 AJAX 来完成这个,但我真的不明白我将如何设置它。我对 Django 本身比较陌生。

【问题讨论】:

  • 你需要一个 Python 库来连接相机并拍照。然后,您需要编写一个 Django 视图来获取图片(使用此库)并将其路径作为 JSON 返回,将 Django URL 关联到此视图,并使用 Ajax 请求从您的 Javascript 调用此 URL。我认为这个问题太宽泛了。请尝试缩小范围。
  • 我已经编写了 python 代码来完成拍照。我不明白的部分是如何让网页发送执行python脚本的请求。我不知道 view.py 或 Ajax 请求代码应该是什么样子。处理请求本身是我迷路的地方。

标签: python ajax django dynamic raspberry-pi


【解决方案1】:

假设你有一个 Python 函数,它用相机拍照并返回文件的路径。

from my_module import take_pic

my_pic = take_pic()
print(my_pic)  # '/path/to/the/picture'

你是说你不知道views.py 应该是什么样子,所以我假设你没有准备好任何 Django 代码。要创建 Django 项目,请安装 Django 并使用django-admin startproject NAME

所以您需要的是一个 Django 视图及其关联的 URL。让我们从 URL 开始:

# urls.py
from . import views

urlpatterns = [
    url(r'^take_pic/', views.take_picture, name='take_pic'),
]

现在,在 urls.py 所在的同一文件夹中创建 views.py 模块。

# views.py
from django.http import JsonResponse

from my_module import take_pic


def take_picture(request):
    my_pic = take_pic()
    return JsonResponse({'path': my_pic})

最后在您的 Javascript 代码中(很可能在 Django HTML 模板中,用另一个视图呈现,但我将把它留作练习):

// this example uses JQuery, but you can find plain Javascript examples on the net

<button id="my-button"></button>

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<script>

  $(document).ready(function () {

    $('my-button').click(function() {

      // url name here is what you wrote in urls.py
      $.getJSON('{% url "take_pic" %}', function (data) {

        var picture_path = data.path;
        // add an HTML <img> tag where you need it, using the picture path
        // note that your view might need to return a relative path, not absolute
      });

    });

  });

</script>

我认为这是一个很好的起点!

【讨论】:

  • 感谢 Pawamoy,这很有帮助。我在上面发布了我的代码(我还是 Stackoverflow 的新手,我希望这是正确的方法)。我希望你能帮我澄清我的问题?
  • 很高兴它有帮助! StackOverflow 并不是要“讨论”(它不像论坛),因此您不应该添加“答案”,因为它在技术上不是答案。但这很好,因为我们将解决您的最后一个问题,并且您将能够编辑您的答案并将其标记为稍后接受,除非出现其他问题,在这种情况下最好删除答案,直到你解决所有问题。简而言之,只发布一次答案一次,您就得到了解决方案! :)
猜你喜欢
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2022-08-06
  • 1970-01-01
  • 2015-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多