首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从Django中的JavaScript调用Python函数?

如何从Django中的JavaScript调用Python函数?
EN

Stack Overflow用户
提问于 2018-08-02 05:06:42
回答 2查看 0关注 0票数 0

我有一个Django Web应用程序,它使用PythonAPI连接到第三方服务来分析文本数据。用户写入文本区域,按下按钮,然后将文本发送到返回JSON对象列表的服务。对此服务的API调用是Python函数。当按下按钮时,我试图使用Ajax对Python函数进行异步调用,使用文本数据作为Param。

我现在还没有试着调用第三方服务。我只是想看看我能否从Python那里得到一个响应,发送输入和接收输出。

我发现的大多数示例都涉及创建表单并提交表单,这样Django框架就会自动调用它的Python函数。表单并不是我想要构建的,我也不想进入一个新的页面来查看结果或者刷新当前的页面。

代码语言:txt
复制
<!-- index.html -->
<html>
<head>
    <title>Test Data</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
    <script>

        document.getElementById("Button").addEventListener('click', analyzeText());

        function analyzeText(){
            var text = document.getElementById('text-to-analyze').value;

            $ajax({
                type: "POST",
                url: "/models.py",   /* Call python function in this script */
                data: {param: text},   /* Passing the text data */
                success: callback
            });
        }

        function callback(response){
            console.log(response);
        }
    </script>
</head>
<body>
    <textarea id="text-to-analyze" rows="12" cols="100"></textarea><br>
    <button id="button" value="Analyze"/>

</body>
</html>


# models.py
from django.db import models

# Function I want to call from Ajax
def testcall():
    return 'test successfull'
EN

回答 2

Stack Overflow用户

发布于 2018-08-02 13:14:56

当你向服务器发出Ajax请求时,服务器会使用一些数据进行响应,或者呈现一个模板。

要使请求响应周期正常工作,你必须创建url到控制器逻辑的映射。你要在urls.py中创建url和python函数映射,python函数将位于views.py中。现在,当你使用给定的方法(POST或GET)请求该url时,它将调用映射函数并返回结果。

票数 0
EN

Stack Overflow用户

发布于 2018-08-02 14:47:48

urls.py创建一个url

代码语言:txt
复制
path('my-ajax-test/', views.myajaxtestview, name='ajax-test-view'),

那么Ajax应该看起来像

注意csrf_token

代码语言:txt
复制
        $ajax({
        type: "POST",
        url: '{{ url 'ajax-test-view'}}',   
        data: {csrfmiddlewaretoken: '{{ csrf_token }}',
              text: "this is my test view"},   /* Passing the text data */
        success:  function(response){
               alert(response);
           }
    });

views.py

代码语言:txt
复制
def myajaxtestview(request):
    return HttpResponse(request.POST['text'])

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100008740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档