2016-12-14 3 views
-1

私は、データベースからデータを選択して変数に割り当てる次の機能を持っています。フラスコWTFフォーム

@app.route("/tasks") 
@login_required 
def tasks(): 
    g.db = connect_db() 
    data = g.db.execute(""" 
      SELECT name, due_date, priority, task_id 
      FROM tasks where status = 1 
     """) 
    open_tasks = [dict(name=row[0], due_date=row[1], priority=row[2], task_id=row[3]) 
        for row in data.fetchall()] 

    data = g.db.execute(""" 
      SELECT name, due_date, priority, task_id 
      FROM tasks where status = 0 
     """) 
    closed_tasks = [dict(name=row[0], due_date=row[1], priority=row[2], task_id=row[3]) 
        for row in data.fetchall()] 
    g.db.close() 
    return render_template(
     'tasks.html', 
     form=AddTaskForm(request.form), 
     open_tasks=open_tasks, 
     closed_tasks=closed_tasks 
    ) 

しかし、理解できないのはform=AddTaskForm(request.form)です。あなたがここに見ることができるようtask.htmlはすでに形です:

<div class="add_task"> 
    <h3>Add a new task</h3> 
    <form action="{{ url_for('add_task') }}" method="post"> 
     <p> 
      <label>Task Name: </label> 
      <input type="text" name="name"> 
     </p> 
     <p> 
      <label>Due Date: </label> 
      <input type="text" name="due_date"> 
     </p> 
     <p> 
      <label>Priority</label> 
      <select name="priority"> 
       <option value="1">1</option> 
       <option value="2">2</option> 
       <option value="3">3</option> 
       <option value="4">4</option> 
       <option value="5">5</option> 
       <option value="6">6</option> 
       <option value="7">7</option> 
       <option value="8">8</option> 
       <option value="9">9</option> 
       <option value="10">10</option> 
      </select> 
     </p> 
     <p> 
      <input type="submit" value="Save"> 
     </p> 
    </form> 
</div> 

なぜ(このチュートリアルの作者)がAddTaskForm(request.form)に割り当てたのですか?

AddTaskFormは以下であるから来てforms.pyのためのコード:

from flask_wtf import Form 
from wtforms import StringField, DateField, IntegerField, SelectField 
from wtforms.validators import DataRequired 

class AddTaskForm(Form): 
    task_id = IntegerField() 
    name = StringField("Task Name", validators=[DataRequired()]) 
    due_date = DateField(
     "Due Date", 
     validators = [DataRequired()], 
     format = '%m/%d/%y' 
    ) 
    priority = SelectField(
     'Priority', 
     validators = [DataRequired()], 
     choices = [ 
      ('1', '1'), ('2', '2'), ('3', '3'), ('4', '4'), ('5', '5'), 
      ('6', '6'), ('7', '7'), ('8', '8'), ('9', '9'), ('10', '10') 
     ] 
    ) 
    status = IntegerField('Status') 

答えて

0

良い質問、フォームとそれのアクションがあなたの関数/ルート/方法に使用されることはありませんので、。だからあなたのどこタスクを作成するために、フォームを使用する場合: あなたが希望:だから、基本的にあなたが結果をレンダリングし、あなたが `#初期化とはどういう意味ですか同じ方法

+0

でフォームデータを受け入れることができる

# Initialization etc. form = AddTaskForm(request.form) if form.validate_on_submit(): # Do whatever with the submited data return render_template("task.html", form=form, ...) 

'#サブミットされたデータには何でもします。どうしたらいいですか? – hadyfarhat

+0

初期化:テンプレートの変数を 'open_tasks'と' closed_tasks'に設定し、 'form'を実行してフォームが送信されているかどうかをチェックし、フォームが送信されて有効であれば' form.validate_on_submit()投稿された 'form.name.data'などにアクセスできます。[Flask-WTF](https://flask-wtf.readthedocs.io/en/stable/)のドキュメントをチェックしてください。 – VKolev

関連する問題