将Javascript数据传递给Django
我是Django(和web开发)的新手,我发现自己在解决这个问题:我使用javascript构建了一个简单的计时器,现在希望在模型中有一个变量,在计时器启动时进行更新。我不知道该怎么做 这是我的密码: home.html:将Javascript数据传递给Django,javascript,html,django,post,Javascript,Html,Django,Post,我是Django(和web开发)的新手,我发现自己在解决这个问题:我使用javascript构建了一个简单的计时器,现在希望在模型中有一个变量,在计时器启动时进行更新。我不知道该怎么做 这是我的密码: home.html: <button onclick='activatecount()' value='countdown'>Start Timer</button> <p id='countdown'></p> <p id='endofcou
<button onclick='activatecount()' value='countdown'>Start Timer</button>
<p id='countdown'></p>
<p id='endofcount'></p>
<script src='{{ STATIC_URL }}timerapp.js'></script>
</body>
</html>
我的视图.py:
def home(request):
return render_to_response('home.html', context_instance=RequestContext(request))
class User(models.Model):
username = models.CharField(max_length=10)
email = models.EmailField(max_length=254)
first_name = models.CharField(max_length = 20)
last_name = models.CharField(max_length = 20)
join_date = models.DateField().auto_now_add
block_count = models.IntegerField()
def __unicode__(self):
return self.username
最后是我的模型.py:
def home(request):
return render_to_response('home.html', context_instance=RequestContext(request))
class User(models.Model):
username = models.CharField(max_length=10)
email = models.EmailField(max_length=254)
first_name = models.CharField(max_length = 20)
last_name = models.CharField(max_length = 20)
join_date = models.DateField().auto_now_add
block_count = models.IntegerField()
def __unicode__(self):
return self.username
我只想在计时器启动时将block_count增加1。(我稍后会添加更多的功能,但我对这件看似琐碎的事情完全不知所措。)我所能找到的只是关于如何使用表单和POST向数据库提交数据的讨论,但我这里没有使用表单
应该在这里使用POST吗?如果是,如何创建第二个视图以更新模型。如果希望在数据库更新时能够保持在同一页面上,请使用jquery的
.ajax
方法调用第二个视图
比如:
views.py
def ajax(request):
if request.is_ajax():
// add 1 to your block count
jquery:
function countdown(element) {
interval = setInterval(function() {
var el = document.getElementById(element);
if(seconds == 0) {
if(minutes == 0) {
el.innerHTML = "countdown's over!";
$.ajax({
type:"POST",
url :"/ajax-url/",
error:function(data){alert('Error');}
success:function(data{alert('OK!');}
});
clearInterval(interval);
return;
// etc etc
网址:
url(r'^ajax-url/$', 'views.ajax'),
这是总的想法。我没有测试过这段代码,但它应该为您提供一个起点,让您了解如何解决问题。您可以创建这样的表单
<form name="myform" action="/update-model/ method="post">
<input type="hidden" name="update" value="yes">
</form>
def update_model(request):
if request.POST:
if request.POST['update']:
#do your code here.
if(minutes == 0) {
el.innerHTML = "countdown's over!";
document.myform.submit();
clearInterval(interval);
return;
} else {
minutes--;
seconds = 60;
}
您的javascript是这样的
<form name="myform" action="/update-model/ method="post">
<input type="hidden" name="update" value="yes">
</form>
def update_model(request):
if request.POST:
if request.POST['update']:
#do your code here.
if(minutes == 0) {
el.innerHTML = "countdown's over!";
document.myform.submit();
clearInterval(interval);
return;
} else {
minutes--;
seconds = 60;
}
在Django(以及一般的web应用程序)中,当您需要服务器执行某些操作时,您会向它发送一个HTTP请求。这是通过将方法映射到url(url.py)来实现的。然后,您可以对1.5执行弃用
关于如何使用web浏览器发送请求,您有一些选择(您的web应用程序的GUI,对吗?)
- 异步
- 同步地
异步发送请求允许在不同的时间加载(重新加载)页面的某些部分,因为服务器可以处理这些部分。从google搜索结果页面再次搜索会异步拉入搜索结果。您可以使用一种称为ajax的技术来完成此操作。请注意,此JS假设使用jQuery,这在问题中并不明显。还要注意:此示例可以在不使用jQuery的情况下重写,尽管您可能会失去理智。Nick,谢谢您的回答。这当然是一个起点。两个问题:1)使用jQuery是唯一可管理的方法吗?你似乎认为是这样的?2) 有关于这类问题的文章或教程吗?这似乎应该是一个非常常见的问题,并有一个简单的解决方案。当然,我可能错了@满意的?无论如何,我现在会研究Nick的建议,并尝试解决这个问题。@BrianFabianCrain如果你想异步发出http请求,jQuery是你最好的选择。如果你不想使用jquery,我相信google中的“xhr”会让你开始。非常感谢你的回答。我一直在研究Ajax(以前不熟悉它)。我将首先尝试同步执行,然后使用AJAX异步执行。这可能需要我几天的时间,但编辑我的答案和结果后。