如何使用flask-restplus更改api的request_loader

问题描述

这是 api 的 init.py。这基本上是一个 api 对象,它使用了 restplus 的蓝图功能,并添加了命名空间。

当我在没有授权令牌的情况下访问 http://localhost:5000/api/v0/projects 时,我不会收到未经授权的消息。

我已经连续两天尝试解决这个问题了。

'''
Base of REST API
'''
import os
from datetime import timedelta
import pkg_resources
from flask import Blueprint,current_app,request,session,Flask
from flask_restplus import Api
from flask_login import LoginManager

from .basespace import NS as basespace_ns
from .files import NS as files_ns
from .jobs import NS as jobs_ns
from .jobs_v1 import NS as jobs_v1_ns
from .notifications import NS as notifications_ns
from .pipelines import NS as pipelines_ns
from .tools import NS as tools_ns
from .projects import NS as projects_ns
from .runs import NS as runs_ns
from .samples import NS as samples_ns
from .search import NS as search_ns
from .users import NS as users_ns
from .xpress import NS as xpress_ns
from .ldap import NS as ldap_ns
from .vendorbuckets import NS as vendorbuckets_ns

BLUEPRINT_v0 = Blueprint('rest_api_v0',__name__,url_prefix='/api/v0')
BLUEPRINT_v1 = Blueprint('rest_api_v1',url_prefix='/api/v1')

@BLUEPRINT_v0.route("/test")
@BLUEPRINT_v1.route("/test")
def api_test():
    ''' Return all settings used in context '''
    data = {
        'Package Versions': {},'Session Variables': {},'Cookie Variables': {},'Request Headers': {},'Environment Variables': {},'Application Settings': {}
    }

    # Package Versions
    installed_packages = pkg_resources.WorkingSet()
    installed_packages_list = sorted(["%s==%s" % (i.key,i.version)
        for i in installed_packages])
    for pkg in installed_packages_list:
        pkg_name,pkg_version = pkg.split('==')
        data['Package Versions'][pkg_name] = pkg_version

    # Session Variables
    for key in session:
        data['Session Variables'][key] = session[key]

    # Cookie Variables
    for key in request.cookies:
        data['Cookie Variables'][key] = request.cookies.get(key)

    # Request Headers
    for key in request.headers.keys():
        data['Request Headers'][key] = request.headers.get(key)

    # Environment Variables
    for key,value in sorted(os.environ.items()):
        data['Environment Variables'][key] = value

    # Application Settings
    for key in current_app.config:
        if isinstance(current_app.config[key],(timedelta)):
            data['Application Settings'][key] = str(current_app.config[key])
        else:
            data['Application Settings'][key] = current_app.config[key]

    return data

app_main = Flask(__name__)
login_manager_1 = LoginManager()
login_manager_2 = LoginManager()
login_manager_3 = LoginManager()
login_manager_1.init_app(BLUEPRINT_v0)
login_manager_2.init_app(BLUEPRINT_v1)
login_manager_3.init_app(app_main)

@login_manager_1.request_loader
def load_user_from_request(request):
    api_key = request.headers.get('Authorization')
    if api_key:
        api_key = api_key.replace('Basic ','',1)
        return User.check_apikey(token) if token else None
    return None

@login_manager_2.request_loader
def load_user_from_request(request):
    api_key = request.headers.get('Authorization')
    if api_key:
        api_key = api_key.replace('Basic ',1)
        return User.check_apikey(token) if token else None
    return None

@login_manager_3.request_loader
def load_user_from_request(request):
    api_key = request.headers.get('Authorization')
    if api_key:
        api_key = api_key.replace('Basic ',1)
        return User.check_apikey(token) if token else None
    return None

API_v0 = Api(BLUEPRINT_v0,title="NGS360 REST API",version="0.1",description="Provide REST API endpoints for NGS 360",doc='/doc/')

API_v1 = Api(BLUEPRINT_v1,version="1.0",doc='/doc/')

API_v0.add_namespace(basespace_ns)
API_v0.add_namespace(files_ns)
API_v0.add_namespace(jobs_ns)
API_v0.add_namespace(ldap_ns)
API_v0.add_namespace(notifications_ns)
API_v0.add_namespace(pipelines_ns)
API_v0.add_namespace(projects_ns)
API_v0.add_namespace(runs_ns)
API_v0.add_namespace(samples_ns)
API_v0.add_namespace(search_ns)
API_v0.add_namespace(tools_ns)
API_v0.add_namespace(users_ns)
API_v0.add_namespace(vendorbuckets_ns)
API_v0.add_namespace(xpress_ns)

API_v1.add_namespace(jobs_v1_ns)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...