Маршрутизация внутри маршрутов - функция настройки была вызвана после обработки первого запроса - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь создать маршруты внутри другого маршрута (info_form()). Какое-то время это работало. Я не уверен, что именно вызвало это, но, возможно, я изменил код, и именно из-за этого он перестал работать. Это мой код:

@app.route('/Register', methods=["GET", "POST"])
def register():
        FormErrMessage = 'Email already taken, or invalid email.'
        error = False
        if request.method == 'POST':
                    inp_email = request.form['email']
                    inp_password = request.form['password']

                    if User.objects(email=inp_email):
                        error = True
                    else:
                        @app.route('/Register/customer-form', methods=['GET', 'POST'])
                        def info_form():
                                msg = None
                                if request.method == 'POST':
                                    form = request.form

                                    inp_name = form['name']
                                    inp_lastName = form['lastName']
                                    inp_zipCode = form['zipCode']
                                    inp_address = form['address']
                                    inp_phoneNumber = form['phoneNumber']

                                    if User.objects(name=inp_name, lastName=inp_lastName):
                                        msg = '...'
                                    elif User.objects(phoneNumber=inp_phoneNumber):
                                            msg = '...'
                                    else:
                                        @app.route('/Register/customer-form/verify/<send>', methods=['GET', 'POST'])
                                        def verify_email(send):
                                                msg = None
                                                error_msg = None
                                                r = 8

                                                if send == 't':
                                                    ...

                                                if request.method == 'POST':
                                                    inp_code = request.form['code']

                                                    if int(inp_code) == r:
                                                        try:
                                                            User(
                                                                email=inp_email,
                                                                password=inp_password,
                                                                user_id=get_user_id(),
                                                                admin=False,
                                                                loggedIn=1,

                                                                # ip_addresses=ipAddress,
                                                                registered=False,
                                                                name=inp_name,
                                                                lastName=inp_lastName,
                                                                zipCode=inp_zipCode,
                                                                address=inp_address,
                                                                phoneNumber=inp_phoneNumber
                                                            ).save()

                                                            email(...)
                                                        except ValidationError as e:
                                                            print(e)
                                                            error_msg = '...'
                                                        else:
                                                            session['email'] = inp_email
                                                            session["password"] = inp_password
                                                            print(session)
                                                            return redirect('/')
                                                    else:
                                                        msg = 'Code invalid, try again.'

                                                return render_template('verify.html', email=inp_email, unk_err=error_msg,
                                                                       msg=msg)
                                        return redirect('/Register/customer-form/verify/t')
                                return render_template('customerform.html', msg=msg)
                        return redirect('/Register/customer-form')
        return render_template('register.html', FormErrMessage=FormErrMessage, error=error)

Кажется, это вызывает повышение, потому что запрос уже был обработан.

Traceback (most recent call last):
  File "C:\Users\William\Nickels\venv\lib\site-packages\flask\app.py", line 2463, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Users\William\Nickels\venv\lib\site-packages\flask\app.py", line 2449, in wsgi_app
    response = self.handle_exception(e)
  File "C:\Users\William\Nickels\venv\lib\site-packages\flask\app.py", line 1866, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\William\Nickels\venv\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "C:\Users\William\Nickels\venv\lib\site-packages\flask\app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\William\Nickels\venv\lib\site-packages\flask\app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\William\Nickels\venv\lib\site-packages\flask\app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\William\Nickels\venv\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "C:\Users\William\Nickels\venv\lib\site-packages\flask\app.py", line 1949, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\William\Nickels\venv\lib\site-packages\flask\app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Users\William\Nickels\app.py", line 55, in register
    @app.route('/Register/customer-form', methods=['GET', 'POST'])
  File "C:\Users\William\Nickels\venv\lib\site-packages\flask\app.py", line 1314, in decorator
    self.add_url_rule(rule, endpoint, f, **options)
  File "C:\Users\William\Nickels\venv\lib\site-packages\flask\app.py", line 90, in wrapper_func
    "A setup function was called after the "
AssertionError: A setup function was called after the first request was handled.  This usually indicates a bug in the application where a module was not imported and decorators or other functionality was called too late.
To fix this make sure to import all your view modules, database models and everything related at a central place before the application starts serving requests.

Может кто-нибудь сказать мне, как исправить это или обойти это. Спасибо. Я этого не понимаю:

import all your view modules, database models and everything related at a central place before the application starts serving requests.

1 Ответ

0 голосов
/ 03 августа 2020

Эта ошибка пытается сказать, что вы не можете выполнять настройки (например, добавлять маршруты) после запуска приложения Flask.

У вас есть более серьезная проблема, а именно: при условии, что функции вложенных маршрутов сохранят видимость данных из включающих маршрутов. Например, маршрут /Register/customer-form будет иметь доступ к inf_email, установленному во включающем маршруте /Register. Механизмы здесь не работают. так что их унесут на следующий маршрут. Здесь это будет означать прохождение inf_email и др. для расширения в шаблон "customerform. html" (и аналогичный шаблон "verify. html").

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