我想通过djang执行一些任务

2024-09-30 22:10:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道以前有人问过这个问题,但没有一个对我有用。我有这个代码,我希望它被执行时,一个按钮被点击,一条消息被传递

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文件”中添加一个输入,这个输入被传递到上面代码中的message变量,与数字相同。我可以用实例轻松地做到这一点,但是当从模板中的表单单击按钮时,如何执行下面的内容?你知道吗

我在Django还是个新手,还在找路

下面是tutorial,它解释了如何生成python文件,但是从shell而不是django应用程序执行它。你知道吗

我希望我清楚地描述了我的问题和任何帮助将不胜感激!你知道吗


Tags: 代码importclientidappnumbermessageyour
3条回答

您只需要一个带有消息字段的表单。在视图中,您希望显示该窗体,当用户按submit时,您希望执行脚本。你知道吗

以下是一些伪代码:

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文档中有关URL、视图、窗体和消息的信息,然后逐步进行:

    1. 获取要加载的页面
    1. 获取要加载的窗体
    1. 让表单提交生效并简单地显示“成功”或“失败”
    1. 最后,编写send\u sms函数(您几乎完成了)

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

在网址.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>

在视图.py地址:

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

希望这有帮助:)

让我们从尘埃云开始。你知道吗

你问的主要是关于网页是如何工作的。您需要知道如何使用HTML传递参数。有很多方法可以做到。但django有一个模式。你知道吗

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

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

你知道吗网址.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的更多信息,请参阅文档的URL dispatcher页。你知道吗

然后在你的应用程序中创建你的视图,在我的示例中是我的应用程序。编辑我的应用程序/视图.py你知道吗

我的应用程序/视图.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。但我建议在templates目录中再创建一个目录。my_app/templates/my_app/my_form.html。这将防止模板冲突。您可以查看文档中的Templates页了解更多信息。你知道吗

我的应用程序/模板/我的应用程序/我的_表单.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>

这是创建窗体的方法之一。但我不推荐。我会让它更漂亮。但首先让“让它工作”,编辑你的视图.py地址:

csrf_token is a django builtin template tag, to put CSRF token into your form. By default django requires CSRF tokens at every post request.

我的应用程序/视图.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并编辑它:

我的应用程序/表单.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)

将表格放入模板中:

我的应用程序/模板/我的应用程序/我的_表单.html你知道吗

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

Besides the form, the action of the HTML form tag is also changed. url template tag is used to get url form url name specified in urls.py. Instead of url tag, {{ request.path }} could have been used.

创建窗体实例并将其传递给模板呈现:

我的应用程序/视图.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')

您可以使用基于类的vie来编写视图,但这不是必需的。希望对你有帮助。你知道吗

相关问题 更多 >