TypeError: формат% d: требуется число, а не тире

Я создаю приложение flask-Dash с аутентификацией токена. если аутентифицированный токен будет, я хочу передать dash.Dash () в приложение flask, в противном случае я хочу вернуть фиктивный макет тире. Но я, когда я нажимаю на панель управления маршрутом, получаю следующую ошибку. Пожалуйста, помогите мне решить эту проблему.

Ошибка: TypeError:% d формат: требуется число, а не тире

__init.py 
"""
Initialize app
"""
from flask import Flask, make_response, request, redirect, jsonify, url_for, session
import jwt
import urllib.parse
from functools import wraps
from datetime import timedelta

import os
print("__init__.py location", os.getcwd())
path = os.path.join("application", "dash_application")
#os.chdir(path)
print("directory after init", os.getcwd())


def create_app():
    """
    construct the flask core application
    :return: Complete app
    """
    app = Flask(__name__)
    app.config.from_object('config.Config')


    """
    auth_request decorator is validating the token, if token is genuine then it returning to next method else
    sending invalid token response to use
    """

    def auth_request(f):
        @wraps(f)
        def wrapper(*args, **kwargs):
            authorization = request.args.get('access_token') or request.headers.get('authorization')

            if not authorization:
                return make_response(jsonify({
                    "message": "Invalid request",
                    "token": "null",
                    "status": False,
                    "error": {
                        "message": "Invalid token or token missing"
                    }
                }), 400)
            try:
                if request.method == "POST":
                    authorization = authorization[7:]  # Removed first Bearer OR bearer from token
                    data = jwt.decode(authorization, app.config.get('SECRET_KEY'), audience=app.config.get('AUDIENCE'))
                    return f(data, *args, **kwargs)

                authorization = urllib.parse.unquote(authorization)  # Removed first Bearer OR bearer from token
                data = jwt.decode(authorization, app.config.get('SECRET_KEY'), audience=app.config.get('AUDIENCE'))
                return f(data, *args, **kwargs)

            except Exception as e:
                print(e)
                return make_response(jsonify({
                    "message": "Invalid request",
                    "token": "null",
                    "status": False,
                    "error": {
                        "message": "Invalid token or token missing"
                    }
                }), 400)

        return wrapper

    @app.route('/', methods=['GET'])
    def index():
        return make_response(jsonify({
            "message": "Success",
            "status": True,
            "error": {}
        }), 200)

    @app.route('/authenticate', methods=['POST'])
    @auth_request
    def authenticate(data):
        return make_response(jsonify({
            "message": "successfully authenticated!",
            "status": True,
            "error": {}
        }), 200)

    @app.route('/twc-admin-panel-integration', methods=['GET'])
    @auth_request
    def twc_admin_panel_integration(data):
        if int(data['corporateId']) > 0:
            session['isAuthenticated'] = 'yes'
            session['corporateId'] = 9 # data.get('corporateId')
            return redirect('/dashboard/')

        return make_response(jsonify({
            "message": "required property is missing in token",
            "status": False,
            "error": {
                "message": "invalid token"
            }
        }), 400)

    @app.route('/dashboard/')
    def mypage():
        app = Flask(__name__)
        app.config.from_object('config.Config')
        # session.permanent = True
        # app.permanent_session_lifetime = timedelta(minutes=app.config.get('SESSION_EXPIRY_TIME'))
        # app.secret_key = app.config.get('SESSION_SECRET')
        with app.app_context():
            print("reached at line 109")
            from application.dash_application.dashapp import add_dash
            dashapp = add_dash(app, 179)  # add_dash returning the dash.Dash instance
            #
            # if session.get('isAuthenticated') is not None:
            #     if 'yes' in session['isAuthenticated']:
            return app, dashapp
            #     return redirect(app.config.get('TWC_ADMIN_URL'))
            # return redirect(app.config.get('TWC_ADMIN_URL'))

    with app.app_context():
        from application.dash_application.dashapp import add_dash
        dashapp = add_dash(app, 179)

    return app, dashapp

И запускаем этот файл приложения с помощью WSGI DispatcherMiddleware

app.py

"""
Application entry point
"""
from application import create_app
from flask_cors import CORS
from werkzeug.middleware.dispatcher import DispatcherMiddleware
from werkzeug.serving import run_simple


def main():
    flask, dash = create_app()
    CORS(flask, resources={r"/*": {"origins": "*"}})
    if dash:
        app = DispatcherMiddleware(flask, {
            'dashboard': dash.server
        })
        run_simple(hostname="127.0.0.1", port=8080, application=app, use_reloader=True, use_debugger=True)

if __name__=="__main__":
    main()

Полная трассировка ошибок:

[2020-06-05 21:54:43,860] ERROR in app: Exception on /dashboard/ [GET]
Traceback (most recent call last):
  File "D:\TWC\DashApp\crazy_corner\lib\site-packages\werkzeug\wrappers\base_response.py", line 298, in status_code
    self._status = "%d %s" % (code, HTTP_STATUS_CODES[code].upper())
KeyError: <dash.dash.Dash object at 0x0000020514B01390>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:\TWC\DashApp\crazy_corner\lib\site-packages\flask\app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "D:\TWC\DashApp\crazy_corner\lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
    return self.finalize_request(rv)
  File "D:\TWC\DashApp\crazy_corner\lib\site-packages\flask\app.py", line 1967, in finalize_request
    response = self.make_response(rv)
  File "D:\TWC\DashApp\crazy_corner\lib\site-packages\flask\app.py", line 2138, in make_response
    rv.status_code = status
  File "D:\TWC\DashApp\crazy_corner\lib\site-packages\werkzeug\wrappers\base_response.py", line 300, in status_code
    self._status = "%d UNKNOWN" % code
TypeError: %d format: a number is required, not Dash


person Amar Kumar    schedule 05.06.2020    source источник
comment
Пожалуйста, предоставьте полную информацию об ошибке.   -  person Grey Li    schedule 06.06.2020
comment
Привет, я добавил ошибку трассировки.   -  person Amar Kumar    schedule 06.06.2020
comment
Любой, кто просматривает это, также может быть заинтересован в соответствующем разговоре о Dash и JWT: stackoverflow.com/q/57629586/320399   -  person blong    schedule 10.09.2020


Ответы (1)


Я не совсем понимаю, что вы пытаетесь сделать, но в этом представлении функция mypage:

def create_app():
    # ...

    @app.route('/dashboard/')
    def mypage():
        # ...
        with app.app_context():
            # ...
            return app, dashapp

    # ...

Когда вы возвращаете кортеж из двух элементов, Flask будет считать, что это (body, status_code), а status_code должен быть числом. Но в вашем случае второй элемент кортежа - это объект Dash (dashapp), который вызывает ошибку. Кроме того, экземпляр приложения Flask (app), который вы вернули в качестве первого элемента кортежа, не является допустимым телом ответа для функции просмотра.

person Grey Li    schedule 06.06.2020
comment
Теперь у меня проблема. Но как я могу интегрировать или обновить пользовательское приложение с макетом в тире? На самом деле я создаю приложение тире для клиентов, в котором макеты создаются по запросу формы clientID. - person Amar Kumar; 06.06.2020
comment
Кроме того, если мой ответ решил текущий вопрос, примите его :) - person Grey Li; 07.06.2020