Web文本输入保存到数据库中,无需表单-Django Javascript
Web text input save into database without form- Django Javascript
我有一个使用django 1.6的sqlite3数据库设置,我希望web用户能够在同一页面上输入文本并在3个实时表(高、低和最新)中查看。理想情况下,一个页面应该有文本输入、投票、当新条目进入或投票时更新的三个表的显示,以及如果可能的话,如果所有这些都经过排序(个人项目,而不是商业项目),则可以进行搜索。如果这很重要的话,我也在win7 64上。。。
目前我有一个工作数据库,三个表显示在一个没有更新的网页上,还有一些通过js输入的web文本(无法保存到Django中的数据库中)。
起初,我避开了表单,因为它们似乎想要单独的html页面进行输入。他询问了一位经验丰富的django程序员,帮我在页面上输入了一些javascript。他说我不需要通过表单和POST、GET来完成,因为文本的初始分数为0,当前日期为时间。
我现在的问题是,我无法在没有错误的情况下将输入的文本保存到数据库中。
由于我需要在2-3周内对此进行编程,而且我是django的新手(虽然我已经用PHP进行了一些处理,但我对javascript一无所知),所以我的问题是;
- 我是否在保存到数据库的文本输入中遗漏了一些明显的内容
-和-
- 有没有一种方法可以在一个页面中使用表单和GET、POST实现所有这些功能所以我可以避免很多javascript(除非它真的更容易)
我现在将开始尝试用Forms来构建这一点,但希望能从更聪明的人那里得到一些关于最佳实践的指导。
这是迄今为止的代码:
urls.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^i/$', 'entries.views.index'),
url(r'^add/(.*)$', 'entries.views.add'),
)
型号.py
from django.db import models
import datetime
from django.utils import timezone
class Entry(models.Model):
text = models.CharField(max_length=15)
score = models.IntegerField(default=0)
pub_date = models.DateTimeField('date published')
def __unicode__(self):
return self.text
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
was_published_recently.admin_order_field = 'pub_date'
was_published_recently.boolean = True
was_published_recently.short_description = 'Published recently?'
index.html
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
</head>
<body>
<ul>
{% for entry in latest_entry_list %}
<li><a href="/entries/{{ entry.id }}/">{{ entry.text }}  {{ entry.score }}</a></li>
{% endfor %}
</ul>
<ul>
{% for entry in high_entry_list %}
<li><a href="/entries/{{ entry.id }}/">{{ entry.text }}  {{ entry.score }}</a></li>
{% endfor %}
</ul>
<ul>
{% for entry in low_entry_list %}
<li><a href="/entries/{{ entry.id }}/">{{ entry.text }}  {{ entry.score }}</a></li>
{% endfor %}
</ul>
<style type="text/css" media="screen">
div h2 span { color: #ff0000; }
div span { color: #00ff00; }
#box { width: 400px; height: 400px; }
#h { color: #ff0000; }
</style>
<h3 id="h">title</h3>
<p>message: {{ text }}</p>
<input type="text" name="word" value="" id="input"/>
<script type="text/javascript" src="{{STATIC_URL}}post.js"></script>
</body>
post.js
console.log("hi from js");
$(document).ready(function() {
$("#input").bind("keypress", function(e) {
//enter key pressed
if (e.keyCode == 13) {
var args = {};
var text = $("#input").val();
$.get("/add/" + text, args).done(function(data) {
console.log("message: " + data);
});
}
});
});
视图.py
from django.shortcuts import render
from django.http import HttpResponse
from entries.models import Entry
from django.db import models
import datetime
from django.utils import timezone
def index(request):
context = {
'latest_entry_list': Entry.objects.order_by('-pub_date')[:10],
'high_entry_list': Entry.objects.order_by('-score')[:10],
'low_entry_list': Entry.objects.order_by('score')[:10],
}
return render(request, 'entries/index.html', context);
def add(request, thingtoadd):
#created_date = models.DateTimeField('date published', default=datetime.now)
#created_score = '0'
#created_text = 'test'
#e = Entry(text=created_text, score=created_score,pub_date=created_date)
#e.save()
return HttpResponse('done')
我不确定是否定义用于填充条目的字段。。。。上面的看起来对吗?
我可以取消注释e=Entry(等等)而不会出错,
但当我取消注释e.save()时,错误为:
GET http://127.0.0.1:8000/add/a 500 (INTERNAL SERVER ERROR) jquery.min.js:4
send jquery.min.js:4
n.extend.ajax jquery.min.js:4
n.(anonymous function) jquery.min.js:4
(anonymous function) post.js:15
n.event.dispatch jquery.min.js:3
r.handle
我将继续尝试以表格的形式来做这件事,但不知道是否有一些好的建议来说明这是否可能——我最好避免js的额外功能,因为我对它非常陌生,在这一点上这将是另一个未知的层面。非常感谢任何意见。。。
您在视图函数中的错误添加:
created_date = models.DateTimeField('date published', default=datetime.now)
必须赋值:
created_date = datetime.now()
不是字段定义。
您可以提前在模型中指定auto_now_add=True:https://docs.djangoproject.com/en/dev/ref/models/fields/#datefield
在这种情况下,字段将自动填充。
附加:
这是urls.py 中的错误
你应该做一些修复:
urls.py:
url(r'^add/$', 'entries.views.add'),
post.js
$("#input").bind("keypress", function(e) {
//enter key pressed
if (e.keyCode == 13) {
var text = $("#input").val();
var args = {'text': text};
$.get("/add/", args).done(function(data) {
console.log("message: " + data);
});
}
});
视图.py
def add(request):
created_date = default=datetime.now()
created_score = '0'
created_text = request.GET.get('text')
e = Entry(text=created_text, score=created_score,pub_date=created_date)
e.save()
return HttpResponse('done')
更新-解决方案
除了以下更改之外,解决方案是在视图中添加"from datetime import datetime"。。。。
- 在django表单集中添加/删除表单的Javascript
- 如何从django表单库中隐藏复选框,并使用Javascript切换其显示属性
- Django-提交表单Ajax(替换Div)
- Jquery自动完成值没有传递给django表单
- 如何从 django 模板语言获取表单数据
- 如何在 html 表单 django 中获取文本字段值
- 可以't使用jQuery(Django)序列化表单
- 在模板中为Django表单分离媒体类对象的JS和CSS列表输出
- 如何在Django表单中设置可接受的文件类型'的FileInput小部件
- 防止使用django表单资产进行Javascript缓存
- 在普通用户的管理表单之外使用Django Tinymce
- Django在不刷新页面的情况下提交表单
- 使用ajax的Django jquery.如何让jquery监听id's生成的表单
- 将JS中的一个变量插入Django表单输入字段
- 当我尝试在django中更新表单时,会遇到这种类型的问题
- 在django中提交表单时更改日期字段值
- 使用jquery验证django中的表单
- 如何在 ajax 加载表单上激活 django form.media javascript
- Django 使用 Javascript 提交的错误表单
- Web文本输入保存到数据库中,无需表单-Django Javascript