티스토리 뷰

flask-admin으로 관리자 페이지 만들기

설치

pip3 install flask-admin

 

# __init__.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from os import path
from flask_login import LoginManager
from flask_admin import Admin # 이 줄 추가
def create_app():
    # app = Flask(__name__)
    # app.config['SECRET_KEY'] = "IFP"
	
    # DB 설정하기
    app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{DB_NAME}'
    # DB 관련 추가 설정
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
	
    # flask-admin
    app.config['FLASK_ADMIN_SWATCH'] = 'Darkly'
    admin = Admin(app, name='blog', template_mode='bootstrap3')
    
    db.init_app(app)

__init__.py 수정 후 /admin 으로 들어가보면 admin 페이지가 만들어져있다.

admin 페이지에 User 모델을 추가하려고 하는데, 

admin.add_views(ModelView(User, db.session))

이런 코드를 추가하면 순환 참조 에러가 발생하기 때문에 3가지 파일을 수정할 것이다.


1. models

맨 아래 User 반환 함수를 만들어 함수로 가져올 수 있도록 한다.

# models.py
# __init__.py에 있던 코드를 옮겨준다.

from flask_sqlalchemy import SQLAlchemy ✅
from flask_login import UserMixin
from sqlalchemy.sql import func

# DB 설정하기 
db = SQLAlchemy() ✅
DB_NAME = "blog.db" ✅


class User(db.Model, UserMixin):
    # 생략


def get_user_model(): ✅
    return User

2. __init__

# __init__.py
from .models import DB_NAME, db, get_user_model # 추가!

def create_app():
    # app = Flask(__name__)
    # app.config['SECRET_KEY'] = "IFP"

    # app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{DB_NAME}'
    # app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

    # app.config['FLASK_ADMIN_SWATCH'] = 'Darkly'
    # admin = Admin(app, name='blog', template_mode='bootstrap3')

    # flask-admin에 model 추가
    # get_user_model 로 유저 클래스를 가져옴
    admin.add_view(ModelView(get_user_model(), db.session))

    # db.init_app(app)

3. auth

# auth.py
# import email, from blog import views, from . import db 다 지워줬습니다..
from unicodedata import category
from flask_login import login_user, logout_user, login_required, current_user
from flask import Blueprint, render_template, request, flash, url_for
from werkzeug.utils import redirect
from werkzeug.security import generate_password_hash, check_password_hash
from .models import db, get_user_model # 추가!
# User를 get_user_model()로 바꿔준다.
user = get_user_model().query.filter_by(email=email).first()
email_exists = get_user_model().query.filter_by(email=email).first()
username_exists = get_user_model().query.filter_by(username=username).first()

 

 

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday