2016-06-18 56 views
0

我知道這個問題之前曾被問過,但沒有人爲我工作。我有這樣的代碼,我想點擊一個按鈕,當它被執行和消息傳遞我想要通過django執行某些東西

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']) 

基本上,我需要的是在一個模板「HTML文件」添加一個輸入,該輸入獲得通過到上面代碼中的消息變量,與數字相同。我可以很容易地通過實例來做到這一點,但是當從模板中的表單中單擊按鈕時,下面的代碼如何執行呢?

我有點Django的新手,仍然發現我的方式

下面是介紹瞭如何使Python的文件,但是從外殼,而不是一個Django應用程序執行它的tutorial

我希望我明確描述我的問題,任何幫助將不勝感激!

+0

的這個問題的答案會很長,但我理解你可能想要從哪裏開始的指針。如果你想用Django構建一個Web應用程序,請按照他們的教程在這裏:https://docs.djangoproject.com/en/1.9/intro/tutorial01/ 但是,我推薦像Flask:http:// flask更簡單。 pocoo.org/docs/0.11/quickstart/#quickstart – slider

+0

我已經有一個Django應用程序:DI只是想知道如何在我的應用程序中創建一個選項,當它被點擊時,代碼得到執行 –

+0

因爲你的代碼是一個Python代碼,你可以直接在你的視圖中編寫你的代碼。其他情況並不美觀。 – scriptmonster

回答

0

所有你需要的是一個帶有消息字段的表單。在視圖中,您想要顯示該表單,並在用戶按下提交時,想要執行腳本。

下面是一些僞 -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}) 

檢查有關的URL,視圖,表單和郵件Django文檔和按部就班:

    1. 加載頁面
  • 得到的形式加載
  • 得到表單提交工作,簡單地示出 「成功」 或 「失敗」
  • 最後,寫send_sms函數(你已經基本完成它)
0

讓我們從塵雲開始。

你在問什麼主要是關於網頁的工作方式。您需要知道如何使用HTML傳遞參數。有很多方法可以做到這一點。但與Django有一個模式。

您需要一個url和一個視圖來捕獲任何請求。然後你需要在裏面創建一個模板和一個表單。使用這種形式,您可以創建一些將數據發送到視圖的請求。

要創建你需要編輯urls.py您的項目中添加一個網址:

網址。py

from django.conf.urls import url 

from my_app.views import my_view 

urlpatterns = [ 
    ... 

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

欲瞭解更多關於網站的信息,請查看URL dispatcher頁面。

然後在您的應用程序中創建您的視圖,在我的示例中爲my_app。編輯程序my_app/views.py

程序my_app/views.py

from django.http import HttpResponse 

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

這樣,你可能與路徑/my_url訪問工作視圖。如果您運行./manage.py runserver,則可以從http://localhost:8000/my_url訪問您的視圖。

要創建表單,您需要創建一個模板。默認情況下,django搜索應用程序目錄中的模板。在您的應用中創建模板目錄,在我們的案例my_app/templates中創建一個HTML文件。例如my_app/templates/my_form.html。但我建議在模板目錄內創建一個更多的目錄。 my_app/templates/my_app/my_form.html。這將防止模板衝突。您可以查看文檔Templates頁面瞭解更多信息。

my_app應用/模板/程序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> 

這是創建表單的方式之一。但我不要推薦它。我會變得更漂亮。但是,首先讓「使它工作」,編輯您views.py:

csrf_token是一個Django內置的模板標籤,把CSRF令牌到表單。默認情況下,django在每個帖子 請求中都需要CSRF令牌。

程序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') 

直到此時這個答案的目的是 「使其工作」。讓我們把它轉換成漂亮和乾淨。首先,我們將創建表格。表單就像模型,它可以幫助你創建表單作爲對象。它也處理表單驗證。表格一般保存在表格目錄中。創建my_app/forms.py並對其進行編輯:

程序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) 

把你的表格模板中:

my_app應用/模板/程序my_app/my_form.html

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

除了表單,HTML表單標籤的動作也發生了變化。 url模板標籤用於獲取在urls.py中指定的url表單url名稱。 可以使用{{ request.path }}來代替url標記。

創建一個表單實例,並把它傳遞到模板渲染:

my_app應用/視圖。py

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

def my_view(request): 
    if request.method == 'GET': 
     form = MyForm() 
     return render('my_app/my_form.html', {'form': form}) 
    elif request.method == 'POST': 
     form = MyForm(request.POST) 

     # check if for is not valid 
     if not form.is_valid(): 
      # return same template with the form 
      # form will show errors on it. 
      return render('my_app/my_form.html', {'form': form}) 

     # your code goes here 
     ... 

     return HttpResponse('Your code result') 

您可以使用基於類的視圖來編寫視圖,但這不是必需的。我希望它有幫助。

0

您可以創建一個視圖,該視圖從url中獲取查詢參數並將其用於進一步的實現。然後,您可以在html模板中創建一個鏈接/按鈕,將其重定向到該網址。例如:

在urls.py

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

模板:

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

在views.py:

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

希望這有助於:)

相關問題