Ekstensi ini menyediakan cara untuk membatasi akses ke aplikasi Flask Anda berdasarkan nama host permintaan yang masuk atau alamat IP atau rentang alamat IP (jaringan).
Instal paket menggunakan PIP:
pip install flask-allowed-hostsAllowedHosts .@allowed_hosts.limit() dekorator (opsional). from flask import Flask , jsonify , abort
from flask_allowed_hosts import AllowedHosts
app = Flask ( __name__ )
ALLOWED_HOSTS = [ "93.184.215.14" , "api.example.com" ]
def custom_on_denied ():
error = { "error" : "Oops! Looks like you are not allowed to access this page!" }
return jsonify ( error ), 403
allowed_hosts = AllowedHosts ( app , allowed_hosts = ALLOWED_HOSTS , on_denied = custom_on_denied )
# Allows all incoming requests
@ app . route ( "/api/public" , methods = [ "GET" ])
def public_endpoint ():
data = { "message" : "This is public!" }
return jsonify ( data ), 200
# Only allows incoming requests from "93.184.215.14" and "api.example.com"
@ app . route ( "/api/private" , methods = [ "GET" ])
@ allowed_hosts . limit ()
def private_endpoint ():
data = { "message" : "This is private!" }
return jsonify ( data ), 200
# We can override the allowed_hosts list and the on_denied function for each route
@ app . route ( "/api/private/secret" , methods = [ "GET" ])
@ allowed_hosts . limit ( allowed_hosts = [ "127.0.0.1" ], on_denied = lambda : abort ( 404 ))
def secret_private_endpoint ():
data = { "message" : "This is very private!" }
return jsonify ( data ), 200
if __name__ == '__main__' :
app . run ( host = '0.0.0.0' , port = 5000 , debug = True )Peringatan : Pendekatan ini dapat menyebabkan perilaku yang tidak terduga ketika dikombinasikan dengan penggunaan berbasis kelas.
@limit_hosts . from flask import Flask , jsonify
from flask_allowed_hosts import limit_hosts
app = Flask ( __name__ )
ALLOWED_HOSTS = [ "93.184.215.14" , "api.example.com" ]
def custom_on_denied ():
error = { "error" : "Custom Denied Response" }
return jsonify ( error ), 403
# Allows all incoming requests
@ app . route ( "/api/public" , methods = [ "GET" ])
def public_endpoint ():
data = { "message" : "This is public!" }
return jsonify ( data ), 200
# Only allows incoming requests from "93.184.215.14" and "api.example.com"
@ app . route ( "/api/private" , methods = [ "GET" ])
@ limit_hosts ( allowed_hosts = ALLOWED_HOSTS , on_denied = custom_on_denied )
def private_endpoint ():
return jsonify ({ "message" : "This is private!" }), 200Anda dapat menemukan lebih banyak contoh di direktori contoh.
app : Instance Aplikasi Flask (Opsional).allowed_hosts : Daftar host yang diizinkan (opsional, default untuk None yang memungkinkan semua host).on_denied : Fungsi untuk perilaku akses yang ditolak (opsional).Ekstensi menghormati konfigurasi ini:
ALLOWED_HOSTS : Daftar host yang diizinkan dalam konfigurasi flask.ALLOWED_HOSTS_ON_DENIED : Fungsi untuk perilaku akses yang ditolak dalam konfigurasi flask.Presedensi : Nilai yang disediakan selama inisialisasi mengesampingkan nilai konfigurasi flask.
Anda dapat mengaktifkan mode debug dengan mengatur variabel lingkungan ALLOWED_HOSTS_DEBUG ke True :
export ALLOWED_HOSTS_DEBUG= " True "Ini akan mencetak pesan debug yang bermanfaat ke konsol.
Kontribusi dipersilakan! Silakan mengirimkan permintaan tarik.
Jika Anda memiliki pertanyaan atau umpan balik, jangan ragu untuk membuka masalah atau permintaan tarik.
Proyek ini dilisensikan di bawah lisensi [MIT] - lihat file lisensi.md untuk detailnya.