Я хочу кнопку на моем сайте, которая будет выполнять скрипт Python - PullRequest
6 голосов
/ 29 сентября 2011

Я сейчас создаю сайт, используя django.Теперь я хочу выполнить скрипт Python из моего шаблона / представления с помощью кнопки на веб-сайте.Это должно быть возможно, но, честно говоря, я не знаю, как.

Пример будет лучшим.

Спасибо за любую помощь.

Ответы [ 4 ]

4 голосов
/ 29 сентября 2011

Если вы используете Django - лучший способ, IMHO, это просто создать представление, которое будет обрабатывать ваш код Python, а затем получить к нему доступ при событии onclick через запрос ajax.

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);
   }
});

Примерно так должно работать.

3 голосов
/ 04 октября 2011

Хорошо, теперь все заработало и просто подумал, что напишу свой ответ:

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>
...
1 голос
/ 29 сентября 2011

Создайте функцию просмотра и создайте для нее @dajaxice_register decorator:

Глупый пример:

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/

Реквизит Хорхе Бастиде, единственному разработчику Dajax / Dajaxice!

0 голосов
/ 16 октября 2012

Что я мог бы придумать для ответа, так это использовать:

Джанго + Даякс

Django ссылка: https://docs.djangoproject.com/en/1.4/

Dajax на самом деле Ajax для Django: Посетите их веб-сайт и обратитесь к их примерам для быстрого старта http://www.dajaxproject.com/

Вы можете создать свою кнопку в представлении django, и после ее запуска вы можете использовать запуск фрагмента Python, а не сценария.

Если вы хотите запустить автономный скрипт, вы можете проверить djcelery. http://pypi.python.org/pypi/django-celery

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...