Ich möchte verhindern, dass die Benutzer auf die Admin-URL zugreifen, ich habe bereits die Ansichten gesichert, aber /admin/ ist immer noch zugänglich.Wie kann verhindert werden, dass Benutzer auf die Admin-Seite zugreifen?
admin.py
import os
from flask import request, redirect, url_for
from werkzeug import secure_filename
from flask_admin import Admin, AdminIndexView
from flask_admin import BaseView, expose
from flask_admin.contrib.sqla import ModelView
from flask_admin.contrib.fileadmin import FileAdmin
from flask_login import current_user,login_required
from develop.extentions import admin_permission
from wtforms import FileField
class AdminIndex(AdminIndexView):
@expose('/admin/')
def index(self):
if not current_user.is_authenticated:
return redirect(url_for('main.index'))
return self.render('admin/home.html')
def is_accessible(self):
return current_user.roles('admin')
class CustomModelView(ModelView):
def is_accessible(self):
return current_user.is_authenticated and admin_permission.can
def inaccessible_callback(self, name, **kwargs):
return redirect(url_for('main.index', next=request.url))
class CustomFileView(FileAdmin):
allowed_extensions = (
'txt',
'md',
'js',
'css',
'html',
'jpg',
'gif',
'png'
)
editable_extensions = ('md','html','js','css','txt')
def is_accessible(self):
return current_user.is_authenticated and admin_permission.can
class UserView(CustomModelView):
column_list = ('username', 'confirmed','joined')
column_searchable_list = ('username', 'id')
column_filters = ('joined', 'email', 'username')
path = os.path.abspath(
os.path.join(
os.path.dirname(__file__),
os.pardir
)
)
form_extra_fields = {
"image": FileField('Image')
}
def on_model_change(self, form, model, is_created):
path = os.path.abspath(
os.path.join(
os.path.dirname(__file__),
os.pardir
)
)
image_path = os.path.join(path, 'static', 'images')
photo_data = request.files.get(form.image.name)
if photo_data:
name = secure_filename(photo_data.filename)
model.image = '/static/images/' + name
photo_data.save(os.path.join(image_path, name))
Auf diese Weise, alle meine anderen Ansichten versteckt sind, aber ich immer noch die Admin-Seite zugreifen, bitte, wie nicht authentifizierte Benutzer verhindern, sogar die Admin-Zugriff.
Es ist mir nicht klar, nachdem Sie Ihren Code hier und Ihren Kommentar zu @ MrLeehs Antwort gelesen haben, ob Ihr Versuch, diesen Code zu verwenden, das '@expose ('/')' enthielt. Ihr oben angegebener Code enthält es nicht. Wenn Sie Ihre Indexmethode nicht dekorieren, gehe ich davon aus, dass die Indexmethode der übergeordneten Klasse (flask_admin.AdminIndexView.index) immer noch Ihren '/ admin /' Endpunkt liefert. – abathur
Code wurde aktualisiert! – reznov11
Da der obige Code '@expose ('/ admin /')' verwendet, ist es immer noch nicht klar, ob Sie '@expose ('/')' '' '? Flask-admin setzt die '/ admin /' bereits diesen Endpunkten vor, daher würde ich meinen Decorator oben mit '/ admin/admin /' versehen. – abathur