簡體   English   中英

Flask應用程序中的“視圖功能未返回有效響應。”錯誤在哪里?

[英]Where is the “The view function did not return a valid response.” error in my Flask app?

我有一個燒瓶應用程序,可將用戶數據添加到MySQL數據庫。 我腳本上的所有內容似乎都能正常運行。 我想要的數據已添加到MySQL數據庫。 但是我收到以下錯誤:

127.0.0.1 - - [28/Jun/2018 12:19:44] "GET /protected HTTP/1.1" 500 -
Traceback (most recent call last):
  File "/Users/open/venv/FlaskMiddleware/lib/python2.7/site-packages/flask/app.py", line 2309, in __call__
    return self.wsgi_app(environ, start_response)
  File "/Users/open/venv/FlaskMiddleware/lib/python2.7/site-packages/flask/app.py", line 2295, in wsgi_app
    response = self.handle_exception(e)
  File "/Users/open/venv/FlaskMiddleware/lib/python2.7/site-packages/flask_restful/__init__.py", line 273, in error_router
    return original_handler(e)
  File "/Users/open/venv/FlaskMiddleware/lib/python2.7/site-packages/flask/app.py", line 1741, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/open/venv/FlaskMiddleware/lib/python2.7/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/Users/open/venv/FlaskMiddleware/lib/python2.7/site-packages/flask/app.py", line 1816, in full_dispatch_request
    return self.finalize_request(rv)
  File "/Users/open/venv/FlaskMiddleware/lib/python2.7/site-packages/flask/app.py", line 1831, in finalize_request
    response = self.make_response(rv)
  File "/Users/open/venv/FlaskMiddleware/lib/python2.7/site-packages/flask/app.py", line 1957, in make_response
    '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.

我真的不知道為什么我得到這個錯誤。

這是我的代碼:

from flask import Flask, request, jsonify, session
from flask_restful import Resource, Api
from werkzeug.security import generate_password_hash, check_password_hash
import mysqldb
from flask_jwt_extended import (
    JWTManager, jwt_required, create_access_token,
    get_jwt_identity
)


app = Flask(__name__)
app.config['SECRET_KEY'] = 'super-secret'
jwt = JWTManager(app)

api = Api(app, prefix="/api/v1")

USER_DATA = {
    "user1": "abc123",
    "user2":"userpass"
}

@app.route('/login', methods=['POST'])
def login():
    if not request.is_json:
        return jsonify({"msg": "Missing JSON in request"}), 400

    username = request.json.get('username', None)
    password = request.json.get('password', None)
    if not username:
        return jsonify({"msg": "Missing username parameter"}), 400
    if not password:
        return jsonify({"msg": "Missing password parameter"}), 400

    if username != USER_DATA.get(username) and password not in USER_DATA[username]:
        return jsonify({"msg": "Bad username or password"}), 401

    access_token = create_access_token({'first_name': request.json.get('Client First Name', None), 'last_name': request.json.get('Client Last Name', None)})
    return jsonify(access_token=access_token), 200

class PrivateResource(Resource):
    @app.route('/protected', methods=['GET'])
    @jwt_required

    def sendData():
        data = get_jwt_identity()
        return mysqldb.addUser("{}".format(str(data['first_name'])),"{}".format(str(data['last_name'])))



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

addUser函數是這樣的:

def addUser(Fname,Lname):
    try:
        cursorObject = connection.cursor()
        cursorObject.execute("call sp_createUser('{}'".format(Fname)+",'{}')".format(Lname))
        connection.commit()
        connection.close()

    finally:
        print('User data added succesfully!')

我的代碼中哪些錯誤導致了錯誤?

您的/protected路徑由sendData函數處理,該函數返回mysqldb.addUser的結果:

return mysqldb.addUser(...) 

無論該函數返回什么,都不是有效的HTTP響應,因此會出現錯誤。

編輯:現在您添加了該函數,我們可以看到它什么也不返回。 因此,您的sendData函數返回None ,這不是要發送到客戶端的有效響應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM