티스토리 뷰
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()
'Python > 파이썬 플라스크' 카테고리의 다른 글
[5주차-2] 카테고리, 게시물 구현 (수정) (0) | 2022.08.07 |
---|---|
[4주차] 로그인/회원가입 처리하기 (0) | 2022.07.18 |
[3주차-2] render_template (0) | 2022.07.11 |
[3주차] __init__ / blueprint (0) | 2022.07.11 |
[2주차-2] Python DB API/SQLite3 (0) | 2022.07.08 |
댓글