如果用户输入错误数据,则重定向到同一页面并显示一条消息
Redirect to the same page and display a message if user insert wrong data
我正在构建一个带有聊天室的网络聊天应用程序。
我有一个页面,用户可以在其中打开一个新房间,页面内有一个表格。
如果用户提交的房间已经存在,我想向他显示一条消息。
例如:
456 房间已经存在,用户试图打开 456 房间。
所以我想弹出一个消息说房间已经存在
服务器端
@app.route('/NewRoom')
def newRm():
return render_template('NewRoom.html')
@app.route('/chat',methods=['GET','POST'])
def CreateRm():
if(request.method=='POST'):
username = request.form['username'].lower()
room = request.form['room'].lower()
ExistRoom = DBManage.ExistRoom(room)
error = "YOU ENTERED ROOM THAT ALREADY EXISTS"
if not ExistRoom:
limit = request.form['limit']
if limit == '':
limit = 'UNLIMITED'
session['limit'] = limit
image = request.files['getFile']
newImgs = open("static/images/" + username + ".jpg","wb")
newImgs.write(image.read())
newImgs.close()
room = room[:5].strip()
DBManage.newRoom(room,limit)
DBManage.newPerson(username,room)
#sDBManage.RoomUsers(room)
#Store the data in session
session['username'] = username
session['room'] = room
return render_template('chat.html', session = session)
else:
flash(error)
return redirect(url_for('newRm',error=error))
在 CreateRm 函数中,最后的 else 对我来说效果不佳,它刷新页面但不发送错误消息,真的不知道如何解决。
客户端
{% if error %}
<p class=error><strong>Error:</strong> {{ error }}
{% endif %}
谢谢大家
问题是您正在将重定向返回到另一条路线,并试图将变量传递给该路线中的模板。一种方法是简单地 re-rendering 模板,同时将变量 error
传递给它。尝试替换:
return redirect(url_for('newRm',error=error))
和
return render_template('NewRoom.html', error=error)
另一种选择是将您的 newRm
路由配置为接受 optional arguments。这可能看起来像这样:
@app.route('/NewRoom', defaults={'error':''})
@app.route('/Newroom/<error>')
def newRm():
return render_template('NewRoom.html')
然后您将错误传递给此路由,就像您一直在做的那样。
return redirect(url_for('newRm', error=error))
要完全解决您的问题,您还必须在 if(request.method=='POST'):
之外添加一个 return
语句以捕获任何 GET 请求。可能是这样的:
return render_template('NewRoom.html')
我正在构建一个带有聊天室的网络聊天应用程序。 我有一个页面,用户可以在其中打开一个新房间,页面内有一个表格。 如果用户提交的房间已经存在,我想向他显示一条消息。
例如: 456 房间已经存在,用户试图打开 456 房间。 所以我想弹出一个消息说房间已经存在
服务器端
@app.route('/NewRoom')
def newRm():
return render_template('NewRoom.html')
@app.route('/chat',methods=['GET','POST'])
def CreateRm():
if(request.method=='POST'):
username = request.form['username'].lower()
room = request.form['room'].lower()
ExistRoom = DBManage.ExistRoom(room)
error = "YOU ENTERED ROOM THAT ALREADY EXISTS"
if not ExistRoom:
limit = request.form['limit']
if limit == '':
limit = 'UNLIMITED'
session['limit'] = limit
image = request.files['getFile']
newImgs = open("static/images/" + username + ".jpg","wb")
newImgs.write(image.read())
newImgs.close()
room = room[:5].strip()
DBManage.newRoom(room,limit)
DBManage.newPerson(username,room)
#sDBManage.RoomUsers(room)
#Store the data in session
session['username'] = username
session['room'] = room
return render_template('chat.html', session = session)
else:
flash(error)
return redirect(url_for('newRm',error=error))
在 CreateRm 函数中,最后的 else 对我来说效果不佳,它刷新页面但不发送错误消息,真的不知道如何解决。
客户端
{% if error %}
<p class=error><strong>Error:</strong> {{ error }}
{% endif %}
谢谢大家
问题是您正在将重定向返回到另一条路线,并试图将变量传递给该路线中的模板。一种方法是简单地 re-rendering 模板,同时将变量 error
传递给它。尝试替换:
return redirect(url_for('newRm',error=error))
和
return render_template('NewRoom.html', error=error)
另一种选择是将您的 newRm
路由配置为接受 optional arguments。这可能看起来像这样:
@app.route('/NewRoom', defaults={'error':''})
@app.route('/Newroom/<error>')
def newRm():
return render_template('NewRoom.html')
然后您将错误传递给此路由,就像您一直在做的那样。
return redirect(url_for('newRm', error=error))
要完全解决您的问题,您还必须在 if(request.method=='POST'):
之外添加一个 return
语句以捕获任何 GET 请求。可能是这样的:
return render_template('NewRoom.html')