第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用于 Flask-Admin 視圖的 Flask-basicAuth auth required

用于 Flask-Admin 視圖的 Flask-basicAuth auth required

BIG陽 2021-11-16 18:22:38
我目前正在使用 Flask 制作一個后端應(yīng)用程序來管理基于組織的用戶消費的資源。由于我使用 Flask-SQLAlchemy,我決定使用 Flask-Admin 作為數(shù)據(jù)庫的管理視圖,但我在保護視圖時遇到了問題。我正在嘗試使用 Flask-BasicAuth 來保護管理視圖,但由于路由是自動生成的,我無法向其中添加 @basic-auth.required 裝飾器。強制站點使用 Flask-BasicAuth 會阻塞資源端點,因此不是一個好的解決方案。嘗試過這樣的事情,但它不起作用:from flask import Flaskfrom flask_sqlalchemy import SQLAlchemyfrom flask_admin import Adminfrom flask_admin.contrib.sqla import ModelViewfrom flask_basicauth import BasicAuthapp = Flask(__name__)db = SQLAlchemy(app)basic_auth = BasicAuth(app)admin = Admin(app)class Module(db.Model):  __tablename__='Modules'  name = db.Column(db.String(30), unique=True, nullable=False)@basic_auth.requiredclass AdminView(ModelView):  passadmin.add_view(AdminView(Module, db.session))TL;DR:Flask 管理員假設(shè)我使用登錄和會話管理器。Flask BasicAuth 假設(shè)我可以手動聲明路由。需要在不阻塞資源端點的情況下以某種方式集成它們。
查看完整描述

2 回答

?
慕尼黑5688855

TA貢獻1848條經(jīng)驗 獲得超2個贊

我在實施它時遇到了同樣的問題。@basic_auth.required 裝飾器不起作用。相反,我們必須調(diào)整幾個flask_admin 類以使其與BasicAuth 兼容。在參考了數(shù)十個資源后,這是我成功實施的方法!


只是提到我正在使用:Python 3.6.9,F(xiàn)lask==1.1.1,F(xiàn)lask-Admin==1.5.4,F(xiàn)lask-BasicAuth==0.2.0


from flask import Flask

from flask_sqlalchemy import SQLAlchemy

from flask_admin import Admin, AdminIndexView

from flask_admin.contrib.sqla import ModelView

from flask_basicauth import BasicAuth

from werkzeug.exceptions import HTTPException


app = Flask(__name__)

db = SQLAlchemy(app)

basic_auth = BasicAuth(app)


class Module(db.Model):

  __tablename__='Modules'

  name = db.Column(db.String(30), unique=True, nullable=False)


"""

The following three classes are inherited from their respective base class,

and are customized, to make flask_admin compatible with BasicAuth.

"""

class AuthException(HTTPException):

    def __init__(self, message):

        super().__init__(message, Response(

            "You could not be authenticated. Please refresh the page.", 401,

            {'WWW-Authenticate': 'Basic realm="Login Required"'} ))


class MyModelView(ModelView):

    def is_accessible(self):

        if not basic_auth.authenticate():

            raise AuthException('Not authenticated.')

        else:

            return True

    def inaccessible_callback(self, name, **kwargs):

        return redirect(basic_auth.challenge())


class MyAdminIndexView(AdminIndexView):

    def is_accessible(self):

        if not basic_auth.authenticate():

            raise AuthException('Not authenticated.')

        else:

            return True

    def inaccessible_callback(self, name, **kwargs):

        return redirect(basic_auth.challenge())


admin = Admin(app, index_view=MyAdminIndexView())


admin.add_view(MyModelView(Module, db.session))


查看完整回答
反對 回復 2021-11-16
?
九州編程

TA貢獻1785條經(jīng)驗 獲得超4個贊

在官方文件說,有它實施只是為了你的管理頁面沒有簡單的方法。但是,我找到了一種解決方法。您可能需要修改flask 中的一些現(xiàn)有類以使其與基本身份驗證兼容。將這些添加到您的代碼中。僅供參考,您需要從燒瓶中導入響應(yīng)。


class ModelView(sqla.ModelView):

    def is_accessible(self):

        if not basic_auth.authenticate():

            raise AuthException('Not authenticated.')

        else:

            return True


    def inaccessible_callback(self, name, **kwargs):

    return redirect(basic_auth.challenge())

from werkzeug.exceptions import HTTPException



class AuthException(HTTPException):

    def __init__(self, message):

        super().__init__(message, Response(

            "You could not be authenticated. Please refresh the page.", 401,

            {'WWW-Authenticate': 'Basic realm="Login Required"'}

        ))

然后像這樣正常添加管理視圖


admin = Admin(app)

admin.add_view(ModelView(Module, db.session))


查看完整回答
反對 回復 2021-11-16
  • 2 回答
  • 0 關(guān)注
  • 229 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號