路由内部路由在处理第一个请求后调用设置函数

2024-06-23 19:27:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在另一个路由(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.

Tags: inpyformappvenvemailrequestlib
1条回答
网友
1楼 · 发布于 2024-06-23 19:27:36

该错误试图说明的是,在Flask应用程序开始运行后,您无法执行setup-y操作(例如添加路由)

您有一个更深层次的问题,即假设嵌套管线函数将保持封闭管线数据的可见性。例如,/Register/customer-form路由将访问封闭的/Register路由中的inf_email集。这里的机制不是那样工作的

由于目的是将信息从注册工作流的一个步骤保留到下一个步骤,因此常见的机制是将一个路由中的状态作为隐藏的表单元素注入,以便将它们带到下一个路由。在这里,这意味着要将inf_email等扩展为“customerform.html”模板(与“verify.html”模板类似)

相关问题 更多 >

    热门问题