我希望通过django执行某些事情

时间:2016-06-18 19:54:26

标签: python 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的新手,仍然找到了我的方式

这是tutorial,它解释了如何制作python文件,但是从shell执行它,而不是django应用程序。

我希望我能清楚地描述我的问题,我们将不胜感激任何帮助!

3 个答案:

答案 0 :(得分:0)

您只需要一个带有消息字段的表单。在视图中,您希望显示该表单,当用户按提交时,您希望执行您的脚本。

这是一些 - 代码:

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

检查关于网址,视图,表单和消息的Django文档,然后一步一步地进行:

    1. 获取要加载的页面
    1. 获取要加载的表单
    1. 让表单提交工作,只需显示"成功"或"失败"
    1. 最后,编写send_sms函数(你几乎完成了它)

答案 1 :(得分:0)

让我们从尘埃云开始。

您要问的主要是网页的运作方式。您需要知道如何使用HTML传递参数。有很多方法可以做到这一点。但是django有一种模式。

您需要一个网址和一个视图来捕获任何请求。然后,您需要在其中创建模板和表单。使用此表单,您可以创建一些将数据发送到视图的请求。

要创建,您需要在项目中编辑urls.py,添加网址:

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

有关网址的更多信息,请查看文档中的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在app目录中搜索模板。在我们的案例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 }}而不是网址标记。

创建表单实例并将其传递给模板呈现:

程序my_app / views.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')

您可以使用基于类的vies来编写视图,但这不是必需的。我希望它有所帮助。

答案 2 :(得分:0)

您可以创建一个视图,该视图从网址中获取查询参数并将其用于进一步实施。然后,您可以在html模板中创建一个链接/按钮,可以将您重定向到该URL。例如:

在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

希望这会有所帮助:)