执行没有响应的python函数 - Django [重复]

Posted

技术标签:

【中文标题】执行没有响应的python函数 - Django [重复]【英文标题】:Execute a python function without response - Django [duplicate] 【发布时间】:2020-04-03 13:02:53 【问题描述】:

我正在一个项目中使用Django,我需要根据用户想要执行的操作来执行一些功能。如果此操作必须返回并显示新值,我知道该怎么做,但是当我只想在我的 views.py 中执行一个函数时,我不需要任何响应并且不知道该怎么做。

现在我正在做的是返回一些东西而不使用它,但我确信它可以不返回任何东西。

我返回响应的代码是:

$('#import_btn').click(function()
    updateData()
);

function updateData(filt)
    console.log('Hello');
    var csrftoken = $("[name=csrfmiddlewaretoken]").val();
    $.ajax(
        url: '/../../updateBBDD/',
        type: 'POST',
        headers:"X-CSRFToken": csrftoken,
        data: 
            'Filt': filt,
        ,
        dataType: "json",
        cache: true,
        success: function(response) 
            var cols = response.Cols;
        
    );

我必须如何在我的js 中执行没有响应的python 函数??

非常感谢。

【问题讨论】:

您只需返回一个空响应,例如return HttpResponse()。每个 HTTP 请求都应该跟一个(可能是空的)HTTP 响应。 How do I send empty response in Django without templates 可能重复?请注意,如果您发送 no 响应,浏览器将感到悲伤和孤独。 (除非你设法切断 TCP 连接,但我认为 Django 不会暴露它。) 【参考方案1】:

您的前端代码 (js) 对 Python 一无所知 - 它所做的只是向给定的 url 发送 HTTP 请求(它当然 期望得到响应 - 这就是HTTP 的基础)。这个请求实际上触发了一些 Python 代码的执行这一事实是完全正交的 - 就您的 js 代码而言,响应也可能只是 Apache 或 nginx 等返回文件的内容,或者某些代理服务器从缓存等

因此,在前端,您的 js 代码发送一个请求它需要一个响应(无论响应内容是什么)。这告诉 j 代码该请求已被接收并以一种或另一种方式处理。

在 Python/Django 方面,Django“视图”是一个“请求处理程序”——一个可调用的(函数、方法或其他),它接受传入的请求并返回响应。请注意,最后一部分是强制性的 - 如果您的视图没有返回响应,您将收到异常。此响应包含的内容由您决定(内容可以完全为空),但您必须返回它。

请注意,即使响应内容实际上是空的,响应也将始终有一个状态代码(默认为 200)告诉客户端(您的 js 代码或其他)请求是否“正确”处理或是否发生任何事情错误的。因此,您可能不想在客户端代码中忽略响应的 status_code(至少),也不想盲目地返回 200 后端发生的任何事情 - 如果某些事情没有按预期工作,您当然想通知用户.. .

鉴于您的问题,我强烈建议您read the HTTP specs。在没有充分理解协议的情况下尝试进行 Web 编程不会产生很好的结果...

【讨论】:

“就你的 js 代码而言,响应也可能只是……”即使是坐在sudo nc -l 80 上的黑客也可以手动输入响应。 :)【参考方案2】:

我认为你把事情复杂化了。 HTTP protocol [wiki] 是一个请求-响应协议。所以通常,每个request 后面都有一个response。该响应可以为空,表示存在问题等。

因此,您可以定义一个视图函数来做某事,并返回一个空的HttpResponse object [Django-doc]:

# app/views.py

from django.http import HttpResponse

def some_view(request):
    # … do something …
    return HttpResponse()

【讨论】:

以上是关于执行没有响应的python函数 - Django [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Django

Django - 视图层

Django-视图层

Django - 视图层

Django的视图层

Django之视图层