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.
解决方案
该错误试图说明的是,在 Flask 应用程序开始运行后,您无法进行设置(例如添加路由)。
您有一个更深层次的问题,即假设嵌套路由函数将保留来自封闭路由的数据的可见性。例如,该/Register/customer-form
路线将有权访问inf_email
封闭/Register
路线中的集合。这里的机制不是那样工作的。
由于意图是从注册工作流的一个步骤到下一个步骤中保留信息,因此常见的机制是将来自一个路由的状态作为隐藏的表单元素注入,以便将它们带到下一个路由。在这里,这意味着通过inf_email
等。扩展为“customerform.html”模板(与“verify.html”模板类似)。
推荐阅读
- python - Python:打开文件和其中的行出现问题
- java - BlockingQueue - 一个生产者多个消费者
- linux - pdf2htmlEX 转换文本但不可见(程序在 linux 上找不到字体文件?)
- javascript - WKWebView Javascript 不会为屏幕下方的对象加载 - Swift
- blazor - 当子组件更改父组件值时,Blazor 运行自定义事件
- r - 在两个不同的数据框中复制给定列的顺序
- java - 如何确保 Java 中的内存可见性?
- r - 使用 dplyr mutate() 和 if_else() 的另一个长度错误
- python - QuerySet 对象没有属性 user
- python - Django:无法读取支付网关发送的 POST 参数