我想在我的网站上有一个按钮来执行python脚本

时间:2011-09-29 08:17:16

标签: python django templates view

我目前正在使用django制作网站。现在我想通过网站上的按钮从我的模板/视图中执行python脚本。它应该是可能的,但说实话我不知道如何。

一个例子是最好的。

感谢您提供任何帮助。

4 个答案:

答案 0 :(得分:4)

如果您正在使用Django - 最好的方法,恕我直言,只是创建将处理您的python代码的视图,然后通过ajax请求在onclick事件中访问它。

<强> yourapp / views.py

def your_python_script(request):
    if request.is_ajax:
        # do your stuff here
        ...
    else:
        return HttpRequest(status=400)

如果您正在使用django,您应该使用jQuery,并在您的模板中添加javascript代码,如下所示:

$("#<your_button_id>").click( function() {
    $.post("your_python_script_url", {<dict with any args you need>}, function () {
        // What to do when request successfully completed
    });
});

如果您正在使用它,请不要忘记CRSF令牌。如何处理它,你可以在官方django文档中找到。

<强>更新

您可以将csrf令牌添加到页面模板中,如:

<script>
var csrf_token = '{% csrf_token %}';
...
</script>

接下来,您需要绑定到全局jquery ajaxSend 事件,并将令牌添加到任何POST请求。

$("body").bind("ajaxSend", function(elm, xhr, s) {
   if (s.type == "POST") {
      xhr.setRequestHeader('X-CSRF-Token', csrf_token);
   }
});

这样的事情应该有效。

答案 1 :(得分:3)

现在好了,我想我会写下答案:

<强> view.py:

import script as gh

def get_hostname(request):
        gh.main()
        return HttpResponseRedirect('/')

urls.py:

... 
url(r'^get_hostname/$', 'thinco.views.get_hostname'), 
...

模板中的某个地方:

...
     <form action="/get_hostname/" method="GET">
        <input type="submit" value="Liste der Thin Clients laden"> 
    </form>
...

答案 2 :(得分:1)

创建一个视图函数并为其执行@dajaxice_register装饰器:

一个愚蠢的例子如下:

models.py:

class Funkyness(models.Model):
    funktasm = models.CharField(max_length=128)
    funfasticness = models.TextField()

urls.py:

url(r'^funk$', 'views.myFunkyView'),

views.py:

def myFunkyView(request)
    render_to_request('index.htm', {'where': 'home'}, context_instance=RequestContext(request))

的index.htm:

{% if where %}
    You are {{ where }}
{% endif %}

当你转到http://yoursite.com/funk时,你会得到index.htm,你会看到一个页面上写着“你在家。”

现在,动态部分...... 写一个视图方法:

from django.utils import simplejson
def getHowFunky(request, v):
    html = """
        <div class="my_message">
            This is really funky, almost stinky...
            <br />
            """ + str(v) + """
        </div>
    """
    return simplejson.dumps({'message': html})

回到index.htm:

<script type="text/javascript>
    /* first argument is return JS function, the second is the dictionary of data to sent to the python method. */
    function init(){
        Dajaxice.package.getHowFunky(showFunky, {'v': "Your's Truly... Fubar"});
    }

    function showFunky(data){
        /* This is the data returned back from the AJAX (Dajaxice) call. */
        document.write(data.message)
    }
</script>

因此,您构建了一个获取输入并返回内容的python方法。你用Dajaxice注册它,你调用它,传递一个回调方法。它运行,当它成功时,它将python返回(可能是JSON对象)作为参数发送到回调方法。然后,该方法将从Dajaxice调用中获得的内容写入屏幕。

有关Dajaxice的更多信息,请访问:http://dajaxproject.com/

支持Jorge Bastida,Dajax / Dajaxice的唯一开发人员!

答案 3 :(得分:0)

我能想到的答案是使用:

Django + Dajax

Django链接: https://docs.djangoproject.com/en/1.4/

Dajax实际上是django的ajax: 访问他们的网站并参考他们的示例以便快速入门 http://www.dajaxproject.com/

您可以在django视图中创建按钮,触发按钮后,您可以使用运行python代码段,而不是脚本。

如果要运行独立脚本,可以查看djcelery。 http://pypi.python.org/pypi/django-celery