Flask - Chuyển hướng & Lỗi

Lớp bình có một redirect()chức năng. Khi được gọi, nó trả về một đối tượng phản hồi và chuyển hướng người dùng đến một vị trí đích khác với mã trạng thái được chỉ định.

Nguyên mẫu của redirect() chức năng như dưới đây -

Flask.redirect(location, statuscode, response)

Trong hàm trên -

  • location tham số là URL nơi phản hồi sẽ được chuyển hướng.

  • statuscode được gửi đến tiêu đề của trình duyệt, mặc định là 302.

  • response tham số được sử dụng để khởi tạo phản hồi.

Các mã trạng thái sau được tiêu chuẩn hóa:

  • HTTP_300_MULTIPLE_CHOICES
  • HTTP_301_MOVED_PERMANENTLY
  • HTTP_302_FOUND
  • HTTP_303_SEE_OTHER
  • HTTP_304_NOT_MODIFIED
  • HTTP_305_USE_PROXY
  • HTTP_306_RESERVED
  • HTTP_307_TEMPORARY_REDIRECT

Các default status mã là 302, dành cho ‘found’.

Trong ví dụ sau, redirect() chức năng được sử dụng để hiển thị lại trang đăng nhập khi nỗ lực đăng nhập không thành công.

from flask import Flask, redirect, url_for, render_template, request
# Initialize the Flask application
app = Flask(__name__)

@app.route('/')
def index():
   return render_template('log_in.html')

@app.route('/login',methods = ['POST', 'GET']) 
def login(): 
   if request.method == 'POST' and request.form['username'] == 'admin' :
      return redirect(url_for('success'))
   else:
      return redirect(url_for('index'))

@app.route('/success')
def success():
   return 'logged in successfully'
	
if __name__ == '__main__':
   app.run(debug = True)

Lớp bình có abort() chức năng với một mã lỗi.

Flask.abort(code)

Các Code tham số nhận một trong các giá trị sau:

  • 400 - cho Yêu cầu Không hợp lệ

  • 401 - cho Chưa được xác thực

  • 403 - đối với Forbidden

  • 404 - cho Không tìm thấy

  • 406 - không được chấp nhận

  • 415 - đối với Loại phương tiện không được hỗ trợ

  • 429 - Quá nhiều yêu cầu

Hãy để chúng tôi thực hiện một thay đổi nhỏ trong login()chức năng trong đoạn mã trên. Thay vì hiển thị lại trang đăng nhập, nếu‘Unauthourized’ trang sẽ được hiển thị, hãy thay thế nó bằng cuộc gọi đến abort(401).

from flask import Flask, redirect, url_for, render_template, request, abort
app = Flask(__name__)

@app.route('/')
def index():
   return render_template('log_in.html')

@app.route('/login',methods = ['POST', 'GET'])
def login():
   if request.method == 'POST':
      if request.form['username'] == 'admin' :
         return redirect(url_for('success'))
      else:
         abort(401)
   else:
      return redirect(url_for('index'))

@app.route('/success')
def success():
   return 'logged in successfully'

if __name__ == '__main__':
   app.run(debug = True)