2017-04-24 3 views
1
@app.route('/profile<int:id>',methods=['POST','GET']) 
def profile(id): 
     id13=session['id'] 
     id_profile=id 
     search=None 
     row=None 
     if id13 != id_profile: 
      return redirect(url_for('logout')) 
     if id13 == "" : 
      return redirect(url_for('logout')) 

     if request.method=="POST": 
      search2=request.form['search']   
      sql="SELECT * FROM muzeu WHERE name LIKE '%"+search2+"%' " 
      con.execute(sql) 
      search=con.fetchall() 
     if request.method=="POST": 
      insert1=request.form["insert1"] 
      insert2=request.form["insert2"] 
      sql2="INSERT INTO comments VALUES('','"+insert1+"','"+insert2+"')" 
      con.execute(sql2) 

     sql3="SELECT * FROM comments " 
     con.execute(sql3) 
     row=con.fetchall() 
     return render_template("profile.html",search=search,row=row)   


and my html page forms 

<form method="POST" action=""> 
    <div class="input-group"> 
    <input type="text" class="form-control" name="search" placeholder="Search"> 
    <div class="input-group-btn"> 
     <button class="btn btn-default" type="submit" name="submit1"> 
     <i class="glyphicon glyphicon-search"></i> 
     </button> 
    </div> 
    </div> 
</form> 


<form method="POST"> 
<div class="input-group"> 
    <span class="input-group-addon">Nume</span> 
    <input id="msg" type="text" class="form-control" name="insert1" placeholder="Additional Info"> 
    </div> 
    <div class="input-group"> 
    <span class="input-group-addon">Descriere</span> 
    <input id="msg" type="text" class="form-control" name="insert2" placeholder="Additional Info"> 
    </div> 
<input type="submit" name="submit2" class="btn btn-primary btn-md"> 
</form> 

私はフラスコを学ぼうとしていますが、私はこの質問に答えることができません。
私は、検索、挿入、および挿入を伴うプロファイルページを作ろうとします。
1つのフラスコ内で、単一のページから多くのhtmlフォームを取得する方法

サブミット後、私はHTTPエラー400を受け取りません。
"ブラウザ(またはプロキシ)がこのサーバが理解できなかった要求を送信しました。"
助けが必要ですか?

答えて

1

ブラウザから送信できるフォームは1つだけです。両方からのデータを処理しようとしていますが、提出されていないデータはrequest.formに存在せず、400エラーが発生します。

提出されたフォームを区別できるようにする必要があります。送信ボタンに名前と値を追加し、どの処理を行うかを知るために返された値を確認します。あなたは名前の付いたボタンを追加することで正しい軌道に乗っていましたが、あなたは一貫性がなく、Flaskで値をチェックしていませんでした。この場合

<!-- in the search form --> 
<button type=submit name=action value=search> 

<!-- in the second form --> 
<button type=submit name=action value=comment> 
if request.method == 'POST': 
    if request.form['action'] == 'search': 
     # do search action 
    elif request.form['action'] == 'comment': 
     # do comment action 

、それは異なるビューの検索を処理して、コメントを持っているより多くの意味があります。 2つのビューを別々に作成し、フォームを正しいURLに向けます。

<form method=post action="{{ url_for('search') }}"> 

<form method=post action="{{ url_for('comment') }}">