2016-06-18 18 views
0

Ich weiß, diese Frage wurde zuvor gestellt, aber keine funktionierte für mich. Ich habe diesen Code, ich will es ausgeführt wird, wenn eine Schaltfläche geklickt wird und eine MeldungIch möchte etwas durch Django ausgeführt werden

import time 
from sinchsms import SinchSMS 

number = '+yourmobilenumber' 
message = 'I love SMS!' 

client = SinchSMS(your_app_key, your_app_secret) 

print("Sending '%s' to %s" % (message, number)) 
response = client.send_message(number, message) 
message_id = response['messageId'] 

response = client.check_status(message_id) 
while response['status'] != 'Successful': 
print(response['status']) 
time.sleep(1) 
response = client.check_status(message_id) 
print(response['status']) 

Grundsätzlich übergeben, was ich brauche, ist eine Eingabe in einer Vorlage „HTML-Datei“ hinzufügen, dieser Eingang übergeben bekommen zu der Nachrichtenvariablen im obigen Code, gleich mit der Nummer. Ich kann das leicht mit Instanzen machen, aber wie kann das Folgende ausgeführt werden, wenn auf eine Schaltfläche aus dem Formular in der Vorlage geklickt wird?

Ich bin irgendwie Neuling in Django und immer noch meinen Weg zu finden

Hier ist die tutorial, das erklärt, wie die Python-Datei zu machen, aber es aus der Shell ausführen, keiner django Anwendung.

Ich hoffe, ich war klar, mein Problem zu beschreiben und jede Hilfe wäre willkommen!

+0

Die Antwort auf diese Frage wird sehr lang sein, aber ich verstehe, dass Sie wollen Hinweise darauf, wo ich anfangen soll. Wenn Sie eine Webanwendung mit Django erstellen möchten, folgen Sie deren Tutorial hier: https://docs.djangoproject.com/en/1.9/intro/tutorial01/ Allerdings empfehle ich etwas leichter wie Flask: http: // Kolben. pocoo.org/docs/0.11/quickstart/#quickstart – slider

+0

Ich habe bereits eine Django App: DI möchte nur wissen, wie man eine Option in meiner App macht, dass beim Klicken der Code ausgeführt wird –

+0

Da Ihr Code ein Python-Code ist Sie können Ihren Code direkt in Ihre Ansicht schreiben. Andere Fälle sind nicht schön. – scriptmonster

Antwort

0

Alles, was Sie brauchen, ist ein Formular mit einem Nachrichtenfeld. In einer Ansicht möchten Sie dieses Formular anzeigen und wenn der Benutzer auf Senden drückt, möchten Sie Ihr Skript ausführen. Hier

ist einige Pseudo -Code:

urls.py 
url('^my-page/' my_views.my_view, name='my-page'), 

forms.py 
SmsForm(forms.Form): 
    message = fields.CharField(...) 


my_views.py 
def my_view(request): 
    form = SmsForm(data=request.POST or None) 
    if request.method == 'POST': 
     if form.is_valid(): 
      send_sms(form.cleaned_data['message']) # do this last 
      messages.success(request, "Success") 
      return HttpResponseRedirect(request.path) 
    else: 
     messages.warning(request, "Failure") 

    return render(request, 'my_template.html', {'form': form}) 

Überprüfen Sie die Django-Dokumentation über URLs, Ansichten, Formulare und Nachrichten und gehen Sie Schritt für Schritt:

    1. Holen Sie sich die Seite zum Laden
    1. die Form erhalten laden
    1. das Formular Vorlage an die Arbeit und einfach zu zeigen, "Erfolg" oder "Misserfolg"
    1. schließlich schreiben die send_sms Funktion (Sie haben es fast geschafft)
0

Beginnen wir von der Staubwolke.

Was Sie fragen, ist hauptsächlich darüber, wie die Webseiten funktionieren. Sie müssen wissen, wie Parameter mit HTML übergeben werden. Es gibt viele Möglichkeiten, dies zu tun. Aber mit Django gibt es ein Muster.

Sie benötigen eine URL und eine Ansicht, um alle Anfragen zu erfassen. Dann müssen Sie eine Vorlage und ein Formular darin erstellen. Mit diesem Formular könnten Sie einige Anfragen erstellen, um Daten an Ihre Ansicht zu senden.

So erstellen Sie in Ihrem Projekt fügen Sie eine URL bearbeiten urls.py müssen:

Urls.py

from django.conf.urls import url 

from my_app.views import my_view 

urlpatterns = [ 
    ... 

    url(r'^my_url$', my_view, name='my_view') 
    ... 
] 

Für mehr über Urls schauen Sie bitte auf URL dispatcher Seite an Dokumentation.

Dann erstellen Sie Ihre Ansicht in Ihrer App, die my_app in meinem Beispiel ist. Bearbeiten my_app/views.py

my_app/views.py

from django.http import HttpResponse 

def my_view(request): 
    return HttpResponse('IT WORKS!') 

diese Weise können Sie eine Arbeitsansicht erhalten, die mit Pfad /my_url zugegriffen werden kann. Wenn Sie ./manage.py runserver ausführen, können Sie auf Ihre Ansicht von http://localhost:8000/my_url zugreifen.

Um ein Formular zu erstellen, müssen Sie eine Vorlage erstellen. Standardmäßig durchsucht django App-Verzeichnisse nach Vorlagen. Erstellen Sie in Ihrer App ein Vorlagenverzeichnis, in unserem Fall my_app/templates, und erstellen Sie darin eine HTML-Datei. Zum Beispiel my_app/templates/my_form.html. Aber ich rate, ein weiteres Verzeichnis im Templates-Verzeichnis zu erstellen. my_app/templates/my_app/my_form.html. Dies verhindert Vorlagenkonflikte. Sie können die Templates Seite unter Dokumentation für mehr überprüfen.

my_app/templates/my_app/my_form.html

<html> 
    <body> 
    <form action="/my_url" method="POST"> 
     {% csrf_token %} 
     <input type="text" name="number"> 
     <input type="text" name="message"> 
     <input type="submit" value="Run My Code"> 
    </form> 
    </body> 
</html> 

Dies ist eine der Möglichkeiten, Ihre Form zu schaffen. Aber ich nicht empfehle es. Ich werde es schöner machen. Aber läßt erste "Make it work", bearbeiten Sie Ihre views.py:

csrf_token ist ein django builtin Template-Tag, setzen CSRF in das Formular Token. Standardmäßig erfordert Django CSRF-Tokens bei jedem Post Anfrage.

my_app/views.py

from django.http import HttpResponse 
from django.shortcuts import render 

def my_view(request): 
    if request.method == 'GET': 
     return render('my_app/my_form.html') 
    elif request.method == 'POST': 
     # get post parameters or None as default value 
     number = request.POST.get('number', None) 
     message = request.POST.get('message', None) 

     # check if parameters are None or not 
     if number is None or message is None: 
      return HttpResponse('Number and Message should be passed') 

     # your code goes here 
     ... 

     return HttpResponse('Your code result') 

Bis zu diesem Punkt ist der Zweck dieser Antwort war "Making it work". Lasst es schön und sauber konvertieren. Zuerst würden wir Formular erstellen. Formulare sind wie Modelle, mit denen Sie Formulare als Objekte erstellen können. Es behandelt auch Formularvalidierungen. Formulare werden im Allgemeinen im Formularverzeichnis gespeichert. Erstellen my_app/forms.py und bearbeiten:

my_app/forms.py

from django import forms 

class MyForm(forms.Form): 
    number = forms.CharField(max_length=15, required=True) 
    message = forms.CharField(max_length=160, required=True) 

Setzen Sie Ihre Form in Ihrer Vorlage:

my_app/templates/my_app/my_form.html

<html> 
    <body> 
    <form action="{% url 'my_view' %}" method="POST"> 
     {% csrf_token %} 
     {{ form }} 
    </form> 
    </body> 
</html> 

Neben dem Formular wird auch die Aktion des HTML-Formular-Tags geändert. url template tag wird verwendet, url form url name in urls.py angegeben zu erhalten. Anstelle des URL-Tags könnte {{ request.path }} verwendet werden.

eine Formularinstanz erstellen und es auf die Vorlage Rendering passieren:

my_app/Ansichten.py

Sie können Klassenbasierte Vies verwenden, um Ihre Ansicht zu schreiben, aber es ist nicht notwendig. Ich hoffe, es hilft.

0

Sie können eine Ansicht erstellen, die Abfrageparameter von der URL übernimmt und für die weitere Implementierung verwendet. Dann können Sie eine Verknüpfung/Schaltfläche in der HTML-Vorlage erstellen, die Sie zu dieser URL weiterleiten kann. Zum Beispiel:

in urls.py:

url(r'^run_a/(?P<msg>\w{0,25})/(?P<num>\w{0,25})/$', yourcode, name='get_msg'), 

in Vorlage:

<a href="{% url 'get_msg' message number %}">submit</a> 

in views.py:

def get_msg(request,msg,num): 
    message=msg 
    number=num 
    #rest of the code 

this helps :)

Verwandte Themen