我知道之前曾问过这个问题,但没有一个对我有用。我有这个代码,我希望它在单击按钮并传递消息时执行
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应用程序。
我希望我能清楚地描述我的问题,我们将不胜感激任何帮助!
答案 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 :(得分: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
希望这会有所帮助:)