Flask - Redirect & Error

Kelas Flask memiliki file redirect()fungsi. Saat dipanggil, ini mengembalikan objek respons dan mengarahkan pengguna ke lokasi target lain dengan kode status yang ditentukan.

Prototipe dari redirect() fungsinya seperti di bawah ini -

Flask.redirect(location, statuscode, response)

Dalam fungsi di atas -

  • location parameter adalah URL tempat respons harus dialihkan.

  • statuscode dikirim ke tajuk browser, default ke 302.

  • response parameter digunakan untuk memberi contoh respons.

Kode status berikut distandarisasi -

  • 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

Itu default status kode adalah 302, yang untuk ‘found’.

Dalam contoh berikut, file redirect() Fungsi ini digunakan untuk menampilkan halaman login kembali ketika upaya login gagal.

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)

Kelas Flask memiliki abort() berfungsi dengan kode kesalahan.

Flask.abort(code)

Itu Code parameter mengambil salah satu dari nilai berikut -

  • 400 - untuk Permintaan Buruk

  • 401 - untuk Tidak Diautentikasi

  • 403 - untuk Terlarang

  • 404 - untuk Tidak Ditemukan

  • 406 - untuk Not Acceptable

  • 415 - untuk Jenis Media yang Tidak Didukung

  • 429 - Terlalu Banyak Permintaan

Mari kita buat sedikit perubahan pada login()berfungsi dalam kode di atas. Alih-alih menampilkan kembali halaman login, jika‘Unauthourized’ halaman yang akan ditampilkan, gantikan dengan panggilan ke 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)