Это расширение предоставляет способ ограничить доступ к вашему приложению Flask на основе имени хоста или IP -адреса входящего запроса или диапазона IP -адресов (сеть).
Установите пакет с помощью PIP:
pip install flask-allowed-hostsAllowedHosts .@allowed_hosts.limit() декоратор (необязательно). 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 )Предупреждение : этот подход может вызвать неожиданное поведение в сочетании с использованием на основе класса.
@limit_hosts Decorator. 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!" }), 200Вы можете найти больше примеров в каталоге примеров.
app : экземпляр приложения Flask (необязательно).allowed_hosts : Список допустимых хостов (необязательно, по None , которые не позволяют всем хостам).on_denied : Функция для отрицательного поведения доступа (необязательно).Расширение уважает эти конфигурации:
ALLOWED_HOSTS : Список разрешенных хостов в конфигурации Flask.ALLOWED_HOSTS_ON_DENIED : функция для отказаного поведения доступа в конфигурации Flask.Приоритет : значения, предоставленные во время инициализации.
Вы можете включить режим отладки, установив переменную среды ALLOWED_HOSTS_DEBUG на True :
export ALLOWED_HOSTS_DEBUG= " True "Это печатает полезные отладочные сообщения в консоли.
Взносы приветствуются! Пожалуйста, не стесняйтесь отправить запрос на привлечение.
Если у вас есть какие -либо вопросы или отзывы, не стесняйтесь открыть проблему или запрос на тягу.
Этот проект лицензирован по лицензии [MIT] - см. Файл Licence.md для получения подробной информации.