Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果我的网站可以从浏览器和一些API访问,我如何使用两个不同的登录管理器进行flask登录?_Python_Api_Flask_Flask Login - Fatal编程技术网

Python 如果我的网站可以从浏览器和一些API访问,我如何使用两个不同的登录管理器进行flask登录?

Python 如果我的网站可以从浏览器和一些API访问,我如何使用两个不同的登录管理器进行flask登录?,python,api,flask,flask-login,Python,Api,Flask,Flask Login,我正在用Flask开发一个网站,它由两部分组成,一个面向用户的GUI和一些API 目前面向用户的部件使用,API应该使用 这两种方法看起来都很容易使用,但我不确定如何在我的应用程序中同时使用它们来区分这两种用例 有什么想法吗 有什么不同的方法可以考虑吗?< /P> < P>你可以使用两个不同的加载器。< /P> 当存在cookie时,Flask Login调用一个用user\u loader修饰的函数。如果没有提供Cookie,则调用用请求加载器修饰的函数[] 快速示例: from flask

我正在用Flask开发一个网站,它由两部分组成,一个面向用户的GUI和一些API

目前面向用户的部件使用,API应该使用

这两种方法看起来都很容易使用,但我不确定如何在我的应用程序中同时使用它们来区分这两种用例

有什么想法吗


有什么不同的方法可以考虑吗?< /P> < P>你可以使用两个不同的加载器。< /P> 当存在cookie时,Flask Login调用一个用

user\u loader
修饰的函数。如果没有提供Cookie,则调用用
请求加载器
修饰的函数[]

快速示例:

from flask import Flask, session
from flask_login import LoginManager, current_user

lm = LoginManager()

users_by_id = {1: User(id=1, username='FirstUser')}
users_by_key = {'xxxyyyzzz': User(id=2, username='SecondUser')}

@lm.user_loader
def load_user(user_
    anon = User(id=0, username='Anonymous')
    return users_by_id.get(int(user_id), anon)


@lm.request_loader
def load_user(request):
    anon = User(id=0, username='Anonymous')
    header = request.headers.get('Auth', None)
    if not header:
        return anon

    return users_by_key.get(header, anon)


def create_app():
    app = Flask(__name__)
    lm.init_app(app)

    @app.route('/')
    def index():
        return 'Hello, {}'.format(current_user)

    @app.route('/login/')
    def login():
        session['user_id'] = 1
        return 'Logged in'

    return app


app = create_app()
app.config['SECRET_KEY'] = 'secret-key'
app.run()
现在,您可以使用浏览器进入并“登录”,然后索引页将正确地将您定位为第一个用户。
然后,您可以发送请求并通过标头进行身份验证,如下所示:

>>> import requests
>>> r = requests.get('http://127.0.0.1:5000/', headers={'Auth': 'xxxyyyzzz'})
>>> r.text
"Hello, User('SecondUser')"

您可以使用两种不同的装载机

当存在cookie时,Flask Login调用一个用
user\u loader
修饰的函数。如果没有提供Cookie,则调用用
请求加载器
修饰的函数[]

快速示例:

from flask import Flask, session
from flask_login import LoginManager, current_user

lm = LoginManager()

users_by_id = {1: User(id=1, username='FirstUser')}
users_by_key = {'xxxyyyzzz': User(id=2, username='SecondUser')}

@lm.user_loader
def load_user(user_
    anon = User(id=0, username='Anonymous')
    return users_by_id.get(int(user_id), anon)


@lm.request_loader
def load_user(request):
    anon = User(id=0, username='Anonymous')
    header = request.headers.get('Auth', None)
    if not header:
        return anon

    return users_by_key.get(header, anon)


def create_app():
    app = Flask(__name__)
    lm.init_app(app)

    @app.route('/')
    def index():
        return 'Hello, {}'.format(current_user)

    @app.route('/login/')
    def login():
        session['user_id'] = 1
        return 'Logged in'

    return app


app = create_app()
app.config['SECRET_KEY'] = 'secret-key'
app.run()
现在,您可以使用浏览器进入并“登录”,然后索引页将正确地将您定位为第一个用户。
然后,您可以发送请求并通过标头进行身份验证,如下所示:

>>> import requests
>>> r = requests.get('http://127.0.0.1:5000/', headers={'Auth': 'xxxyyyzzz'})
>>> r.text
"Hello, User('SecondUser')"

我试图添加两个加载程序,但根本没有调用请求加载程序。有什么可能的原因吗?我能想到的唯一一件事是发送了cookie,因此跳过了
request\u loader
。如何发出API请求?我将用一个小例子来更新我的答案。确实如此。非常感谢。我试图添加这两个加载程序,但根本没有调用请求加载程序。有什么可能的原因吗?我能想到的唯一一件事是发送了cookie,因此跳过了
request\u loader
。如何发出API请求?我将用一个小例子来更新我的答案。确实如此。非常感谢你。