Проблема, с которой вы столкнулись, может быть связана с тем, как обрабатывается редирект внутри вашей настройки обертки `require_admin`. Давайте разберемся с вашим кодом и увидим, что можно сделать, чтобы все работало корректно.
### Код обертки
Ваша обертка выглядит корректно, но возможно проблема в том, что вы не передаете правильные аргументы или обрабатываете `server_id` неправильно. Давайте немного акцентируем внимание на важные детали.
```python
from functools import wraps
from flask import redirect, url_for
def require_admin(f):
@wraps(f)
def wrapper(*args, **kwargs):
server_id = kwargs.get('server_id') # Убедитесь, что вы получаете правильный `server_id`.
servers = get_user_servers() # Предполагается, что эта функция возвращает список серверов пользователя.
if str(server_id) not in map(lambda g: g['id'], servers): # Здесь также нужно использовать `server_id`.
return redirect(url_for('testpage')) # Убедитесь, что у вас есть маршрут с именем 'testpage'.
return f(*args, **kwargs)
return wrapper
```
### Обратите внимание на следующее:
1. **Проверка `server_id`**: Убедитесь, что вы правильно получаете `server_id` из `kwargs`. Возможно, вам нужно передать его явно в аргументах функции, где вы используете декоратор. Вам нужно использовать `server_id`, который передается в функцию, а не `id`, который может быть неопределен.
2. **Маршрут `testpage`**: Убедитесь, что у вас определен маршрут с именем `testpage` в вашем приложении Flask. Он должен выглядеть примерно так:
```python
@app.route('/testpage')
def testpage():
return "Это тестовая страница."
```
3. **Использование декоратора**: Убедитесь, что вы используете декорированную функцию правильно, чтобы передавать необходимые параметры. Например:
```python
@app.route('/somepage/<server_id>')
@require_admin
def somepage(server_id):
return "Вы находитесь на странице сервера."
```
### Пример маршрута
Вот пример применения вашего декоратора и определения маршрутов:
```python
@app.route('/somepage/<server_id>')
@require_admin
def somepage(server_id):
return f"Сервер {server_id} доступен."
```
Если после вышеуказанных изменений редирект все еще не срабатывает, проверьте логи вашего приложения на наличие ошибок или уведомлений, которые могут указать на причину проблемы.