В настоящее время я работаю над реализацией Oauthlib-Flask для API без REST. Но у меня есть два сценария, в которых я хочу изменить/добавить значение объекта запроса фляги. Поскольку это неизменно, это не так просто. Я попытался сделать дубликат, как это предлагается в разделе "Изменение значений в объекте запроса werkzeug" < /а>. Но поскольку @oauth.authorize_handler
использует данный объект запроса, мне пришлось бы заменить его, что приводит к ошибке UnboundLocalError: local variable 'request' referenced before assignment
. Вот мой пример кода (это часть неявного гранта):
@app.route('/oauth/authorize', methods=['GET', 'POST'])
@login
@oauth.authorize_handler
def authorize(*args, **kwargs):
if request.method == 'GET':
client_id = kwargs.get('client_id')
client = Client.query.filter_by(client_id=client_id).first()
kwargs['client'] = client
return render_template('authorize.html', **kwargs)
r = make_duplicate_request(request)
#Change/add values of r
request = r
return True
Я что-то не так делаю или есть другая возможность изменить объект запроса?
Спасибо за вашу помощь!
Обновление: приведенный выше код описывает ситуацию, когда я хочу передать информацию в функцию tokensetter. Это можно было бы сделать с помощью глобальной переменной, но я хотел этого избежать.
В моей процедуре регистрации клиент отправляет такой запрос в API:
params_signup = {
"schemas":["urn:scim:schemas:core:2.0:User"],
"expireIn":3600,
"username":"[email protected]",
"password":"123",
"access_token":"",
"externalId":"tmeinhardt",
"grant_type":"password",
"client_id":"1",
"params":{
"age":"20-30",
"gender":"m",
}
}
Мне нужны части grant_type
и client_id
только для обработчика токенов, и я хотел добавить их вручную в объект запроса. Но так как этот объект неизменяем...
oauth.authorize_handler
получит доступ к глобальному контекстуrequest
до запуска вашего метода. Из-за того, как Flask обрабатывает контекст запроса, вы также не можете просто перепривязать глобальное имя . - person Martijn Pieters   schedule 29.05.2014g
? - person Martijn Pieters   schedule 29.05.2014