Javascript 在Flask app上获取日期时间数据时出错 背景
我想做的是实现一个表单,在用Python Flask和SQLAlchemy编写的web应用程序上插入具有特定数据类型(如2019-10-23 22:38:18)的datetime 我的前一个问题: 问题和错误消息 当我编辑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:未定义名称‘表单’” 但是,当我从
@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)```