Вставка данных в базу данных Oracle из формы в Python Flask - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть код Python.

import cx_Oracle
import re
from flask import Flask, render_template, request, url_for, redirect

app = Flask(__name__)

app.config['SECRET_KEY'] = 'd369342136ecd032f8b4a930b6bb2e0e'

@app.route('/add')
def edited():
    connect = cx_Oracle.connect("********", "********", "******/XE")
    cursor = connect.cursor()

    cod_ed = request.form['cod_ed']
    nome_ed = request.form['nome_ed']
    endereco = request.form['endereco']
    telefone = request.form['telefone']
    cidade = request.form['cidade']
    execute = """INSERT INTO editor VALUES
            (:cod_ed, :nome_ed, :endereco, :telefone, :cidade)"""
    cursor.execute(execute, {'cod_ed':cod_ed, 'nome_ed':nome_ed, 'endereco':endereco, 'telefone':telefone, 'cidade':cidade})
    connect.commit()

@app.route('/', methods=['GET', 'POST'])
def add_data():
    return render_template('forms.html')


@app.route('/post_data', methods=['GET','POST'])
def post_data():
    return redirect(url_for('edited'))

if __name__ == "__main__":
    app.run(host = 'localhost', port = 8000, debug=True)

И его HTML-корреспондент:

<!DOCTYPE html>
<html>
<head>
    <!-- Latest compiled and minified CSS -->
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

        <!-- Optional theme -->
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">

        <!-- Latest compiled and minified JavaScript -->
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous">
        </script>
    <title>Base de dados</title>
</head>
<body>
    <form methods="POST" action="/post_data">
        <div class="col-lg-2">
            <div class="form-group">
                <label for="element-1" >Codigo:</label>
                <input id="cod_ed" name="cod_ed" type="text" class="form-control" placeholder="Codigo"/>

                <label for="element-2" >Nome:</label>
                <input id="nome_ed" name="nome_ed" type="text" class="form-control" placeholder="Nome"/>

                <label for="element-3" >Endereço:</label>
                <input id="endereco" name="endereco" type="text" class="form-control" placeholder="Endereço"/>

                <label for="element-4" >Telefone:</label>
                <input  id="telefone" name="telefone" type="text" class="form-control" placeholder="Telefone"/>

                <label for="element-5" >Cidade:</label>
                <input  id="cidade" name="cidade" type="text" class="form control" placeholder="Cidade"/>

                <input class="btn btn-info" type="submit" value="Enter">
                </div>
            </div>
        </div>
    </form>
</body>
</html>

Я относительно новичок в Flask и Python в целом.Когда я запускаю формы, они отображаются, но когда я пытаюсь вставить их в базу данных, я получаю следующее:

werkzeug.exceptions.HTTPException.wrap.<locals>.newcls: 400 Bad Request: KeyError: 'cod_ed'

Что именно вызывает его и как его исправить?

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Здесь вы отправляете данные формы в /post_data и перенаправляете их в /add, чтобы отредактированная функция не имела доступа к объекту запроса, содержащему данные формы.Поэтому просто измените действие формы на /add, чтобы оно работало правильно.

0 голосов
/ 20 сентября 2018

При отправке на конечную точку /post_data браузер получает код перенаправления, а затем получает /add без публикации каких-либо данных, вызывая ошибку ключа.

Вы выбираете элементы формыв неправильном месте.Вы должны выполнить логику вставки базы данных внутри /post_data и затем перенаправить на /add.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...