Является ли этот запрос JSON для этого метода POST в этом коде Python правильно? - PullRequest
0 голосов
/ 06 ноября 2019

Программа запущена, но у меня проблема с почтой, у меня ошибка 500, и в консоли у меня есть

File "main.py", line 34, in add_user cursor.close() UnboundLocalError: local variable 'cursor' referenced before assignment 127.0.0.1 - - [06/Nov/2019 12:03:38] "POST /add HTTP/1.1" 500 -

import pymysql
from app import app
from db_config import mysql
from flask import jsonify
from flask import flash, request


@app.route('/add', methods=['POST'])
def add_user():
    try:
        _json = request.json
        _wartosc = _json['wartosc_pojazdu']
        _email = _json['email']
        _datazakupu = _json['data_zakupu_pojazdu']
        _datarejestracji = _json('data_pierwszejrejestracji')

        if _wartosc and _email and _datazakupu and _datarejestracji and request.method == 'POST':

            # save edits
            sql = "INSERT INTO tbl_gap(id, wartosc, email, data_zakupu_pojazdu, data_pierwszejrejestracji) VALUES(%d, %d, %s, %s, %s)"
            data = (_id, _wartosc, _email, _datazakupu, _datarejestracji)
            conn = mysql.connect()
            cursor = conn.cursor()
            cursor.execute(sql, data)
            conn.commit()
            resp = jsonify('User added successfull!')
            resp.status_code = 200
            return resp
        else:
            return not_found()
    except Exception as e:
        print(e)
    finally:
        cursor.close() 
        conn.close()

@app.errorhandler(404)
def not_found(error=None):
    message = {
        'status': 404,
        'message': 'Not Found: ' + request.url,
    }
    resp = jsonify(message)
    resp.status_code = 404

    return resp


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

app= Flask(__name__)
app.config['TESTING'] = True

Я думаю, что основнойпроблема с запросом json, но я не могу узнать, где.

    "wartosc_pojazdu":300,
    "email":"casdf@roytuts.com",
    "data_zakupu_pojazdu":"1992/12/12",
    "data_pierwszejrejestracji": "1992/23/23"

является ли правильный почтовый запрос?

Не могу найти решение этой проблемы так долго, так что спасибо за любой совет.


Хорошо, это помогло, но я все еще получаю информацию о том, что у меня неверное заявление о возврате.

"The view function did not return a valid response. The" TypeError: The view function did not return a valid response. The function either returned None or ended without a return statement. 127.0.0.1 - - [06/Nov/2019 12:43:32] "POST /add HTTP/1.1" 500 - 

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Вы должны определить cursor во всех случаях:

def add_user():
    try:
        cursor = None
        # other code elided

    except Exception as e:
        print(e)
    finally:
        if cursor:
            cursor.close() 
1 голос
/ 06 ноября 2019

Именно поэтому блоки try должны быть как можно меньше.

Внимательно посмотрите на свой код. Если if условие False, то cursor не определено. Затем в блоке finally вы звоните cursor.close(), но вы не можете этого сделать, поскольку cursor не определено!

То же самое касается conn.

Лучшее решение - убедиться, что блок try настолько мал, насколько возможно, возможно, переместите его внутрь условия if.

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