Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Flask app上获取日期时间数据时出错 背景_Javascript_Python_Html_Jinja2_Flask Sqlalchemy - Fatal编程技术网

Javascript 在Flask app上获取日期时间数据时出错 背景

Javascript 在Flask app上获取日期时间数据时出错 背景,javascript,python,html,jinja2,flask-sqlalchemy,Javascript,Python,Html,Jinja2,Flask Sqlalchemy,我想做的是实现一个表单,在用Python Flask和SQLAlchemy编写的web应用程序上插入具有特定数据类型(如2019-10-23 22:38:18)的datetime 我的前一个问题: 问题和错误消息 当我编辑 @app.route('/') def index(): return render_template('index.html', data=Todo.query.all(), form=form) 它返回错误“NameError:未定义名称‘表单’” 但是,当我从

我想做的是实现一个表单,在用Python Flask和SQLAlchemy编写的web应用程序上插入具有特定数据类型(如2019-10-23 22:38:18)的datetime

我的前一个问题:

问题和错误消息 当我编辑

@app.route('/')
def index():
    return render_template('index.html', data=Todo.query.all(), form=form)
它返回错误“NameError:未定义名称‘表单’”

但是,当我从当前代码中删除form=form时,在单击submit按钮后的transited页面上,错误已更改为“请求错误浏览器(或代理)发送了此服务器无法理解的请求”

代码 app.py

从flask导入flask、呈现模板、请求、重定向、url、中止、jsonify
从flask_sqlalchemy导入sqlalchemy
导入系统
导入日期时间
app=烧瓶(名称)
app.config['SQLALCHEMY\u DATABASE\u URI']='postgres://username@本地主机:5432/datetime'
db=SQLAlchemy(应用程序)
类Todo(db.Model):
__tablename_uu='todos'
id=db.Column(db.Integer,主键=True)
name=db.Column(db.String)#Jon
city=db.Column(db.String(120))35;纽约
datetime=db.Column(db.datetime())#2019-10-23 22:38:18
定义报告(自我):
返回f“”
db.create_all()
@app.route('/todos/create',methods=['POST'])
def create_todo():
错误=错误
正文={}
尝试:
name=请求。表单['name']
城市=请求。表格['city']
datetime=request.form['datetime']
todo=todo(名称=名称,城市=城市)
db.session.add(todo)
db.session.commit()
body['name']=todo.name
body['city']=todo.city
正文['datetime']=todo.datetime
除:
错误=真
db.session.rollback()
打印(sys.exc_info())
最后:
db.session.close()
如果出现错误:
中止(400)
其他:
返回jsonify(正文)
#过滤器
def format_datetime(值,format='medium'):
date=dateutil.parser.parse(值)
如果格式==“完整”:
format=“eee MMMM,d,y”at“h:mma”
elif格式==‘中’:
format=“EE MM,dd,y h:mma”
返回babel.dates.format\u datetime(日期,格式)
app.jinja_环境过滤器['datetime']=格式\u日期时间
@应用程序路径(“/”)
def index():
返回呈现模板('index.html',data=Todo.query.all(),form=form)
index.html


待办事项应用程序
.隐藏{
显示:无;
}
名称
城市
日期时间
出了点问题!
    {数据%中d的%s}
  • {{d.name}
  • {{d.city}
  • {{d.datetime}
  • {%endfor%}
const nameInput=document.getElementById('name'); const cityInput=document.getElementById('city'); const dtInput=document.getElementById('datetime'); document.getElementById('form').onsubmit=function(e){ e、 预防默认值(); const name=nameInput.value; const city=cityInput.value; const datetime=dtInput.value; descInput.value=''; 获取('/todos/create'{ 方法:“POST”, 正文:JSON.stringify({ “名称”:名称, “城市”:城市, “datetime”:datetime, }), 标题:{ “内容类型”:“应用程序/json”, } }) .then(response=>response.json()) 。然后(jsonResponse=>{ log('response',jsonResponse); li=document.createElement('li'); li.innerText=名称; li.innerText=城市; li.innerText=日期时间; document.getElementById('todos').appendChild(li); document.getElementById('error')。className='hidden'; }) .catch(函数(){ document.getElementById('error')。className=''; }) }
环境 Python 3.6.0

烧瓶1.1.1

炼金术 1.3.10


PostgreSQL 11.5

由于将
表单
对象传递到
渲染模板
函数时,在引用该对象之前,不会在任何位置创建该对象,因此会引发此错误


至于错误请求,可能是由于您在第一次调用端点时关闭了
db.session
。因此,对端点的任何后续调用都将尝试访问关闭的会话,并抛出一个错误。

由于将
表单
对象传递到
渲染模板
函数时,在引用该对象之前,不会在任何位置创建该对象,因此会引发该错误


至于错误请求,可能是由于您在第一次调用端点时关闭了
db.session
。因此,对端点的任何后续调用都将尝试访问已关闭的会话,并抛出一个错误。

我仍然不能确切确定发生错误的原因。如果您能指出我的代码中除以下部分之外的部分,我将不胜感激。不知道如何更改该部分:``@app.route('/')def index():return render_template('index.html',data=Todo.query.all(),form=form)``我仍然不确定发生错误的原因。如果您能指出我的代码中除以下部分之外的部分,我将不胜感激。不知道如何更改该部分:``@app.route('/')def index():return render_template('index.html',data=Todo.query.all(),form=form)```