微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何使用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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?