储存温度下降值的Flask

2024-05-19 00:05:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个Flask/Postgres应用程序上工作,遇到了一个我构建的下拉列表的问题-我不知道如何将下拉列表中的选定值存储到我的数据库中。请让我知道我错过了什么。我在网上搜索过,但大多数相关的答案都是关于PHP而不是Flask的。

这是我的酒瓶视图:

@app.route('/logworkout', methods=['POST'])
def post_log_workout(): 
try:   
    studio = (request.form.get['studio'])
    instructor = (request.form.get['instructor'])        
    workout = Workout(studio=studio, instructor=instructor)
    db.session.add(workout)
    db.session.commit()        
except:
    return render_template("submit_workout.html", studio="", instructor="",
    error="Error, your log is incomplete! Please check and submit it again!")
return render_template("submit_workout.html", studio=studio, instructor=instructor, error="")

这是HTML:

<form action="" method='post'>    
  <h3>2. Which Studio?</h3>
  <select name='studio'>
      <option value='Name1'>LongerName1</option>
      <option value='Name2'>LongerName2</option>
      <option value='Name3'>LongerName3</option>          
  </select>

      <h3>2. Which Instructor?</h3>
  <select name='instructor'>
      <option value='Name1'>LongerName1</option>
      <option value='Name2'>LongerName2</option>
      <option value='Name3'>LongerName3</option>          
  </select>

<input type='submit' value='submit'>
 </form>

Tags: formlogflask列表getvaluerequestpost
1条回答
网友
1楼 · 发布于 2024-05-19 00:05:30

你有几件事要改正。

首先,Flask视图应该同时包含GET和POST,我会将您的视图代码重新排列为:

@app.route('/logworkout', methods=['GET','POST'])
def post_log_workout(): 
    error=""
    if request.method == 'POST':   
        studio = (request.form.get['studio'])
        instructor = (request.form.get['instructor'])
        if studio is not None and instructor is not None:       
            workout = Workout(studio=studio, instructor=instructor)
            db.session.add(workout)
            db.session.commit() 
            # you can redirect to home page on successful commit. or anywhere else
            return redirect(url_for('index'))       
        else:
            error="Error, your log is incomplete! Please check and submit it again!")

    return render_template("submit_workout.html", error=error)

您只需要在代码中使用一次render_模板。它的工作方式是当一个GET请求被触发时,即您第一次访问url/logworkout,表单将被显示,一旦输入并发布,然后将重定向到主页或任何地方。

在表单代码中,表单操作不应为空。您需要使用url_for()方法调用视图

改变这个

# Incorrect
<form action="" method='post'>

# Correct
<form action="{{ url_for('post_log_workout') }}" method='post'>

相关问题 更多 >

    热门问题