2017-06-20 7 views
0

私はPythonとAJAXの初心者です。なぜapp.htmlでapp.pyを実行すると、表示したい結果がフォーム全体に置き換えられますか?ここでフォームを正しくAJAXでFlaskに送信するには?

私のコードです:

from flask import Flask, render_template, request 

app = Flask(__name__, 
template_folder='C:\\Users\\iyzadsyammil\\PycharmProjects\\PVT - Copy') 

@app.route('/App',methods=['GET', 'POST']) 
def showapp(): 
error = " " 
finalpb= 0 
x=0 
logpb=0 

if request.method == 'POST': 
    ingor = request.form['inGOR'] 

    ingor = float(ingor) 

    try: 
     finalpb = ingor 
    except ValueError: 
     error = "Please enter an appropriate value!" 

return render_template('app.html',error=error,finalpb=finalpb) 

if __name__ == "__main__": 
    app.run(debug=True) 

これは私のPythonのフラスコファイルです

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> 
    <meta name="description" content=""> 
    <meta name="author" content=""> 
    <link rel="icon" href="https://media.licdn.com/mpr/mpr/shrink_200_200/AAEAAQAAAAAAAAfJAAAAJDIxMDc1NWExLTczODgtNDBhOS1iZmYwLWRmOTZjZjc2NzVhYQ.png"> 

    <title>Invigour Tool</title> 

    <!-- Bootstrap core CSS --> 
    <link href="http://getbootstrap.com/dist/css/bootstrap.min.css" rel="stylesheet"> 
    <!-- Custom styles for this template --> 
    <!--<link href="dashboard.css" rel="stylesheet" type="text/css">--> 
    <style> 

/* Move down content because we have a fixed navbar that is 50px tall */ 
body { 
    padding-top: 50px; 

} 

/* 
* Global add-ons 
*/ 

.sub-header { 
    padding-bottom: 10px; 
    border-bottom: 1px solid #eee; 
} 

/* 
* Top navigation 
* Hide default border to remove 1px line. 
*/ 
.navbar-fixed-top { 
    border: 0; 
} 

/* 
* Sidebar 
*/ 

/* Hide for mobile, show later */ 
.sidebar { 
    display: none; 
} 
@media (min-width: 768px) { 
    .sidebar { 
    position: fixed; 
    top: 51px; 
    bottom: 0; 
    left: 0; 
    z-index: 1000; 
    display: block; 
    padding: 20px; 
    overflow-x: hidden; 
    overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */ 
    background-color: #f5f5f5; 
    border-right: 1px solid #eee; 
    } 
} 

/* Sidebar navigation */ 
.nav-sidebar { 
    margin-right: -21px; /* 20px padding + 1px border */ 
    margin-bottom: 20px; 
    margin-left: -20px; 
} 
.nav-sidebar > li > a { 
    padding-right: 20px; 
    padding-left: 20px; 
} 
.nav-sidebar > .active > a, 
.nav-sidebar > .active > a:hover, 
.nav-sidebar > .active > a:focus { 
    color: #fff; 
    background-color: #428bca; 
} 

/* 
* Main content 
*/ 

.main { 
    padding: 20px; 
} 
@media (min-width: 768px) { 
    .main { 
    padding-right: 40px; 
    padding-left: 40px; 
    } 
} 
.main .page-header { 
    margin-top: 0; 
} 

/* 
* Placeholder dashboard ideas 
*/ 

.placeholders { 
    margin-bottom: 30px; 
    text-align: center; 
} 
.placeholders h4 { 
    margin-bottom: 0; 
} 
.placeholder { 
    margin-bottom: 20px; 
} 
.placeholder img { 
    display: inline-block; 
    border-radius: 50%; 
} 

/* Custom page footer */ 
.footer { 
    padding-top: 10px; 
    margin-top: 2cm; 
    color: #777; 
    border-top: 1px solid #e5e5e5; 

} 

.cal{ 
    float: right; 
    box-shadow: 0 12px 16px 0 rgba(0,0,0,0.24), 0 17px 50px 0 rgba(0,0,0,0.19); 
    width: 180px; 
    height: 85px; 
    font-size: 30px; 
    border-radius: 24px; 
    background-color: limegreen; 
    position: relative; 
    right: 0.5cm; 
} 

.conti{ 
    float: right; 
    box-shadow: 0 12px 16px 0 rgba(0,0,0,0.24), 0 17px 50px 0 rgba(0,0,0,0.19); 
    width: 180px; 
    height: 85px; 
    font-size: 30px; 
    border-radius: 24px; 
    background-color: limegreen; 
} 

.rest{ 
    float: right; 
    box-shadow: 0 12px 16px 0 rgba(0,0,0,0.24), 0 17px 50px 0 rgba(0,0,0,0.19); 
    width: 180px; 
    height: 85px; 
    font-size: 30px; 
    border-radius: 24px; 
    background-color: limegreen; 
    margin-top: 3cm; 
    position: relative; 
    left: 7cm; 
} 

input[type="number"]{ 
    margin-left: 3cm; 
} 

select[id=cor4],[id=cor5]{ 
    width: 165px; 
} 

select{ 
    margin-left: 1cm; 
} 

p[id=pb],[id=rs],[id=bo],[id=co],[id=uo],[id=po],[id=zf],[id=bg],[id=pg],[id=ug],[id=bw],[id=uw],[id=pw],[id=cw],[id=iow],[id=iog]{ 
    margin-left: 4cm; 
} 

tr:hover{ 
    background-color:#f5f5f5} 

    </style> 
    </head> 

<body> 
    <div> 

    <nav class="navbar navbar-inverse navbar-fixed-top"> 
     <div class="container-fluid"> 
     <div class="navbar-header"> 
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> 
      <span class="sr-only">Toggle navigation</span> 
      <span class="icon-bar"></span> 
      <span class="icon-bar"></span> 
      <span class="icon-bar"></span> 
      </button> 
      <a class="navbar-brand" href="http://www.invigourenergy.com/">Invigour Energy</a> 
     </div> 
     <div id="navbar" class="navbar-collapse collapse"> 
      <ul class="nav navbar-nav navbar-right"> 
      <li><a href="Menu">Dashboard</a></li> 
      <li><a href="PVT Menu">PVT Tool</a></li> 
      <li><a href="#">Help</a></li> 
      </ul> 
      <form class="navbar-form navbar-right"> 
      <input type="text" class="form-control" placeholder="Search..."> 
      </form> 
     </div> 
     </div> 
    </nav> 

    <div class="container-fluid"> 
     <div class="row"> 
     <div class="col-sm-3 col-md-2 sidebar"> 
      <ul class="nav nav-sidebar"> 
      <li class="active"><a href="#">Overview <span class="sr-only">(current)</span></a></li> 

      <li><a href="#"> </a></li> 
      <li><a href="#"> </a></li> 
      </ul> 
      <ul class="nav nav-sidebar"> 
      <li><a href=""> </a></li> 
      <li><a href=""> </a></li> 
      <li><a href=""> </a></li> 
      <li><a href=""> </a></li> 
      <li><a href=""> </a></li> 
      </ul> 
     </div> 
     <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main"> 
      <form method="POST" class="form" id="fm"> 
       <h3>Basic PVT Application</h3> 
       <br> 
       <table> 
        <tr><td><u>Input Data</u></td><td></td><td></td></tr> 
        <tr><td>&nbsp</td></tr> 
        <tr><td>Solution GOR(Rs) </td><td><input type="number" step="any" id="inGOR" name="inGOR"></td><td>scf/bbl</td></tr> 
        <tr><td>Oil Gravity </td><td><input type="number" step="any" id="inOG"></td><td>API</td></tr> 
        <tr><td>Gas Specific Gravity </td><td><input type="number" step="any" id="inGG"></td><td>SG(air=1)</td></tr> 
        <tr><td>Temperature </td><td><input type="number" step="any" id="inT"></td><td>◦F</td></tr> 
        <tr><td>Pressure </td><td><input type="number" step="any" id="inP"></td><td>Psia</td></tr> 

        <tr><td>Mole Percent H2S </td><td><input type="number" step="any" id="inH2S"></td><td>%mole</td></tr> 
        <tr><td>Mole Percent CO2 </td><td><input type="number" step="any" id="inCO2"></td><td>%mole</td></tr> 
        <tr><td>Mole Percent N2 </td><td><input type="number" step="any" id="inN2"></td><td>%mole</td></tr> 
        <tr><td>Water Salinity </td><td><input type="number" step="any" id="inWS"></td><td>ppm</td></tr> 
       </table> 
       <br> 
       <table> 
        <tr><td><u>Correlation</u></td><td></td></tr> 
        <tr><td>&nbsp</td></tr> 
        <tr> 
         <td>Bubble Point Pressure(Pb) </td> 
         <td> 
          <select id="cor1"> 
           <option value="none"></option> 
           <option value="VB">Vasquez and beggs</option> 
           <option value="AM">Al-Marhoun</option> 
           <option value="G">Glaso</option> 
           <option value="PF">Petrosky and Farshad</option> 
           <option value="S">Standing</option> 
          </select> 
         </td> 
        </tr> 
        <tr> 
         <td>Solution GOR(Rs)</td> 
         <td> 
          <select id="cor2"> 
           <option value=" "></option> 
           <option value="VB">Vasquez and beggs</option> 
           <option value="AM">Al-Marhoun</option> 
           <option value="G">Glaso</option> 
           <option value="PF">Petrosky and Farshad</option> 
           <option value="S">Standing</option> 
          </select> 
         </td> 
        </tr> 
        <tr> 
         <td>Oil Formation Volume Factor(Bo) </td> 
         <td> 
          <select id="cor3"> 
           <option value=" "></option> 
           <option value="VB">Vasquez and beggs</option> 
           <option value="AM">Al-Marhoun</option> 
           <option value="G">Glaso</option> 
           <option value="PF">Petrosky and Farshad</option> 
           <option value="S">Standing</option> 
          </select> 
         </td> 
        </tr> 
        <tr> 
         <td>Oil Viscosity(µo) </td> 
         <td> 
          <select id="cor4" size=""> 
           <option value=" "></option> 
           <option value="CC">Chew Connally</option> 
           <option value="BR">Beggs Robinson</option> 
          </select> 
         </td> 
        </tr> 
        <tr> 
         <td>Water Viscosity(µw) </td> 
         <td> 
          <select id="cor5" size=""> 
           <option value=" "></option> 
           <option value="Mc">Mccain</option> 
           <option value="BB">Brill and Beggs</option> 
          </select> 
         </td> 
        </tr> 
       </table> 
       <br> 
       <button type="button" class="conti" onclick="location.href='Out';" >Continue</button><button type="submit" id="cb" class="cal">Calculate</button> 
       <button type="button" class="rest" onclick="res()">Reset</button> 
       <br> 

       <table class="rlt"> 
        <tr><td><u>Result</u></td><td></td></tr> 

        <tr><td>Pb</td><td><p id="pb">{{finalpb}}</p></td></tr> 
        <tr><td>Rs(Solution GOR)</td><td><p id="rs"></p></td></tr> 
        <tr><td>Bo</td><td><p id="bo"></p></td></tr> 
        <tr><td>Co</td><td><p id="co"></p></td></tr> 
        <tr><td>µo</td><td><p id="uo"></p></td></tr> 
        <tr><td>ρo</td><td><p id="po"></p></td></tr> 
        <tr><td>Z Factor</td><td><p id="zf"></p></td></tr> 
        <tr><td>Bg</td><td><p id="bg"></p></td></tr> 
        <tr><td>ρg</td><td><p id="pg"></p></td></tr> 
        <tr><td>µg</td><td><p id="ug"></p></td></tr> 
        <tr><td>Bw</td><td><p id="bw"></p></td></tr> 
        <tr><td>µw</td><td><p id="uw"></p></td></tr> 
        <tr><td>ρw</td><td><p id="pw"></p></td></tr> 
        <tr><td>Cw</td><td><p id="cw"></p></td></tr> 
        <tr><td>IFT oil-water</td><td><p id="iow"></p></td></tr> 
        <tr><td>IFT oil-gas</td><td><p id="iog"></p></td></tr> 
       </table> 
       <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
       <script> 

       $('#fm').on('submit',function (e) { 
         $.ajax({ 
          type: 'post', 
          url: '/App', 
          data: $('#fm').serialize(), 
          success: function (q) { 
         document.getElementById("pb").innerHTML= q; 
         } 
         }); 
        e.preventDefault(); 
        }); 


       </script> 

       <br/> 
       <footer class="footer"> 
       <p>Copyright © Invigour Energy 2016</p> 
       </footer> 
      </form> 

     </div> 

     </div> 
     </div> 
    </div> 


    <!-- Bootstrap core JavaScript 
    ================================================== --> 
    <!-- Placed at the end of the document so the pages load faster --> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
    <script>window.jQuery || document.write('<script src="../../assets/js/vendor/jquery.min.js"><\/script>')</script> 
    <script src="http://getbootstrap.com/dist/js/bootstrap.min.js"></script> 
    <!-- Just to make our placeholder images work. Don't actually copy the next line! --> 
    <script src="http://getbootstrap.com/assets/js/vendor/holder.min.js"></script> 
    <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> 
    <script src="http://getbootstrap.com/assets/js/ie10-viewport-bug-workaround.js"></script> 
</body> 
</html> 

これは私のhtml

である私のAJAXの一部でのみ

+1

私はすでに両方のコードブロックを見ました、申し訳ありません! ;) –

+0

コマンドラインでcurlを使って 'http:// yourdomain/App'にアクセスするとどうなりますか?あなたのアプリの外に投稿をして、AJAX opが何をしているのかをエミュレートしてみてください。 – halfer

+0

どこですか?私は理解していません – iyzad

答えて

0

を見てください。更新された応答:

私の元の答えを言い換えることができます:AJAXを使用しないでください。まったく必要ありません。すべてのスクリプト項目を削除します。私はちょうどあなたのコードを取って、AJAXなしでローカルのフラスコ環境でうまく動作させるようにしました。 =彼らは入力、タイプがあるよう

1)あなたの「ボタン」を更新して提出し、それらをあなたが(例えば計算)希望するボタンの名前の値を与える:ここではあなたが何をする必要があるかです。

2)フォームの入力に「名前」属性がありません。それがなければ、フォームにはキー/値の関連付けがありません。たとえば、inOG入力を確認します。あなたはそれに名前をつける必要があります:name="inOG"のようなもの。

3)私はなぜ構成項目としてあなたのCドライブを持っているのかわかりません。多分それはWindowsのものでしょうか?

ここでデバッグすると、フォームの値がきれいに表示されるはずです。


あなたはいくつかの理由のために問題に実行している:あなたのフォームはあまりにも忙しいです

1)。理想的には、自分の経験では、フォームには実際に必要な入力とラベルのみが含まれている必要があります。また、テーブルを使用してhtmlページをフォーマットすることは一般的には賢明ではありません。フォーム全体をコーディングしたくないと思われる場合は、Flask-WTFを使用することを検討することもできます。 Flaskの素晴らしい点の1つは、WTFのようなテンプレートを使用できることです。あなたがきれいにフォームを設定した場合

2)、そしてあなたも、あなたの場合に好適であるかもしれない、AJAXを使用する必要はありません。フォームが提出されると、Flaskコードは残りの処理を行う必要があります。あなたはそれがあなたのAJAXポストは、右フォームコードの途中であることは注目に値しますAJAXを使用して曲がっている場合は

2)。ブラウザはコードを順番に読み取るので、フォームのレンダリングが完了する前にAJAXポストを取得しています。 <script>タグは、本文の上部または下部に挿入する必要があります。あなたは$(document).ready機能で任意の実行可能コードをラップする必要があることを意味jQueryのを使用している

3)。次のように前述したように、あなたのスクリプトを移動した後、そう、あなたが書くべきです:

<script> 

$(document).ready(function(){ 

$('#fm').on('submit',function (e) { 
    $.ajax({ 
     type: 'post', 
     url: '/App', 
     data: $('#fm').serialize(), 
     success: function (q) { 
     document.getElementById("pb").innerHTML= q; 
     } 
     }); 
    e.preventDefault(); 
    }); 

} 

要約すると、私は自分のフォームをクリーンアップし、完全にAJAXを離れてやってお勧めします。あなたのフォームデータを見ると、普通のフォームの提出から離れなければならない特別なものはないようです。

Good Luck!

+0

こんにちは、私はすでにあなたがアドバイスし、スクリプトを底に置くのが好きでしたが、ボタンをクリックすると何も起こりません。私は、すべてのユーザー入力を消さずにフォームに出力を表示したいだけです。あなたが私にもっと教えてくれることを願っています – iyzad

+0

上記の応答が更新されました。 AJAXは使用しないでください。 –

+0

私はajaxを使用しないと、送信時にユーザー入力をどのように保持するのですか? – iyzad