が含まれていますのRequest.Formは、私は私のHTMLからフォームデータのASCII文字を持っていると私のFlaskAppが文字を処理するとき、それは私にこのようなエラーが発生しますASCII文字に
- UnicodeEncodeErrorを:「ASCII」コーデックことができます序数が範囲内にない(128)
私は自分のアプリケーションで何かを変更しなければならないと信じています。例えば、リクエストフォームをデコードしてください。それを行う方法を見つけることができません。ここで
は、コードは以下のとおりです。
HTML
<body>
<div id="avisos">
<form action="/opcion/avisos_cadastrar/resultado" method="post"> <br>
<fieldset>
<legend> Aviso </legend>
<center> <h3> Cadastrar </h3> </center>
<br>
Titulo: <input type="text" name="titulo" maxlength="32" autocomplete='off'> </input>
<textarea name="aviso" id="text-area" rows="10" cols="50" maxlength="512" autocomplete='off'> </textarea>
<br>
<input type=submit value="enviar">
<script>
var area = document.getElementById("text-area");
var message = document.getElementById("message");
var maxLength = 512;
var checkLength = function() {
if(area.value.length <= maxLength) {
message.innerHTML = (maxLength - area.value.length) + " caracteres restantes.";
}
}
setInterval(checkLength, 150);
</script>
</fieldset>
</form>
</div>
</body>
FlaskApp
@app.route("/opcion/avisos_cadastrar/resultado", methods = ['POST'])
def avisos_cadastrar_resultado():
__titulo = request.form['titulo']
__aviso = request.form['aviso']
query_insert_aviso = " INSERT INTO tjs_stage.avisos (Titulo, Aviso) VALUES ('{} ', '{} ')" .format(__titulo,__aviso)
cur.execute(query_insert_aviso)
con.commit()
return render_template('resultado.html')
私も..
__titulo = request.form['titulo'].decode("utf-8")
__aviso = request.form['aviso'].decode("utf-8")
のようなものを使用してみました...と。 ..
__titulo = request.form['titulo'].decode("raw_unicode_escape")
__aviso = request.form['aviso'].decode("raw_unicode_escape")
...しかし、機能しませんでした。
HTMLやFlaskAppで何かが見つからないことがありますが、少し失われます。
誰かに手を差し伸べることはできますか?
TSM :)!
あなたのエラーは実際に '__titulo'と' __aviso'の値を設定した行から来ていることをトレースバックから示していますか? cur.execute()から来る可能性が高いと思われます。また、フォームからのデータを使用してSQLクエリを実行するときは注意が必要です。悪意のあるユーザーによる潜在的なSQLインジェクション攻撃を防ぐために、そのデータをエスケープする必要があります。 –
ニースのヒント@タイラー、ありがとう。私はSQLインジェクションの可能性について考えなかった。これを改善するだろう。ありがとうございました! Tracebackについて..これは、HTMLフォームに文字Ñが含まれているときに実際に生成されます。私はデフォルトでASCIIエンコーディングを使用するPython 2.7.6を使用しています。明らかに、ÑはASCIIテーブルによって認識される文字ではありません。私はこの状況を経験したことはないと認めなければなりません。 – ivanleoncz
あなたは大歓迎です、少しupvoteの愛を忘れないでください;)エンコーディングについては、私はこれが一般的なPythonの問題ではないと思います。私はあなたのパッケージで使用しているパッケージスクリプト。 Pythonはユニコードでうまくいっていますが、これを一撃してください。あなたのスクリプトの一番上に、 'import sys'、' reload(sys) '、そして最後に' sys.setdefaultencoding( 'utf-8') '(これはhttp://geekforbrains.com/post/setting-the -default-encoding-in-python)の投稿を参照してください。それが動作しない場合、私は別の理論を持っています... –