2017-11-16 6 views
0

私はユーザーの入力を取得し、jsonとして詳細を返そうとしています。 しかし、私はエラーを取得し、私はなぜ見つけることができません。 ハーズは私のpythonのコードです:jsonのpythonフラスコ

from flask import Flask, request, render_template,jsonify 
import json 
@app.route('/user_input') 
def user_input(): 
    return render_template('user-input.html') 


@app.route('/user_input',methods = ['POST']) 
def result(): 
    NAME = request.form['Book_Name'] 
    PAGE = request.form['Page'] 
    TEXT = request.form['Text'] 
    TOPIC = request.form['Topic'] 
    pythonDictionary = {'bookName': NAME, 'page': PAGE, 'text': TEXT, 'topic': TOPIC} 
    dictionaryToJson = json.dumps(pythonDictionary) 
    return jsonify(dictionaryToJson) 

と私のHTMLファイル:

<html> 
    <body> 

     <form action = "http://localhost:5000/result" method = "POST"> 
     <p>Book Name <input type = "text" name = "Book_Name" /></p> 
     <p>Page <input type = "text" name = "Page" /></p> 
     <p>Text <input type = "text" name = "Text" /></p> 
     <p>Topic <input type ="text" name = "Topic" /></p> 
     <p><input type = "submit" value = "submit" /></p> 
     </form> 

    </body> 
</html> 

にはどうすれば適切な値を返すことができますか?

+0

私の回答が助けられたら、それが正しいとマークしてください。あなたに素敵な一日を! – alexisdevarennes

答えて

1

あなたはdictをダンプするには、二回jsonifyとしてもjson.dumps()を行います(それはまた、あなたがjson.dumps()の代わりにそれを使うべき理由であるだけであなたのための正しい応答ヘッダを設定します。

dictionaryToJson = json.dumps(pythonDictionary) 
return jsonify(dictionaryToJson) 

これを行います

from flask import Flask, request, render_template,jsonify 
import json 
@app.route('/user_input') 
def user_input(): 
    return render_template('user-input.html') 


@app.route('/user_input',methods = ['POST']) 
def result(): 
    NAME = request.form['Book_Name'] 
    PAGE = request.form['Page'] 
    TEXT = request.form['Text'] 
    TOPIC = request.form['Topic'] 
    pythonDictionary = {'bookName': NAME, 'page': PAGE, 'text': TEXT, 'topic': TOPIC} 
    return jsonify(pythonDictionary) 
1

0)varsには大文字を使用しないでください。大文字は常に定数用です。

1)doesをフラスコ追加のリダイレクトを回避するために末尾に「/」を持つルートを使用する:あなたが必要なものを得るために同じルート同じ機能を使用してください)

@app.route('/user_input/', methods = ['POST']) 

2:

from flask import Flask, request, render_template, jsonify 


def json_response(status_code, data): 
    res = jsonify(data) 
    res.status_code = status_code 
    return res 

app = Flask(__name__) 


@app.route('/user_input/', methods=["GET", "POST"]) 
def user_input(): 
    if request.method == "GET": 
     return render_template('user-input.html') 
    else: 
     python_dictionary = {'bookName': request.form.get('Book_Name'), 
          'page': request.form.get('Page'), 
          'text': request.form.get('Text'), 
          'topic': request.form.get('Topic')} 
     return json_response(200, python_dictionary) 

app.run() 

3)そして、はい、あなたはjsonify

に辞書を渡す前 json.dumps(pythonDictionary)を使用する必要はありません

4)get()関数returnsは、キーエラー例外を発生させる代わりに、そのようなkey:valueがない場合はNoneになるため、request.form['key']ではなくrequest.form.get('key')を使用することを検討してください。

+0

ルートエンド( '/ user_input /')にスラッシュを付ける唯一の利点は、ブラウザにスラッシュ( '/ user_input')がないと例外がスローされないことですが、それ以外の利点はありませんそれを使っているのでしょうか? (すでにリンクされているドキュメントを読む)。 –

+0

ブラウザにスラッシュがない場合は例外ではありません。このスラッシュでルーティングするだけのリダイレクトがあります。ドキュメントから: 彼らはかなり似ていますが、URL定義の末尾にスラッシュを使用する点で異なります。最初のケースでは、プロジェクトエンドポイントの標準URLにスラッシュが付きます。その意味では、ファイルシステム上のフォルダに似ています。末尾にスラッシュを付けずにアクセスすると、Flaskは後ろにスラッシュが付いた標準URLにリダイレクトされます。 –

関連する問題