问题描述
这是 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 (将#修改为@)