해당 게시글은 튜토리얼글이 아닙니다. ㄴ 처음 진행한 미니 프로젝트로 여러 시행 차고가 있었다 보니, 나중에 이미 겪었던 사건사고 없이 안정적으로 진행하길 바라며 요약 형식으로 작성하였습니다. ㄴ 깊게 설명을 하기보다는 어떻게 진행했고, 당시 무슨 에러가 나와서 어떻게 해결했는지 간단한 메모로 이루어져 있습니다.
🏆 프로젝트 목표
지금까지 배워왔던 내용 정리하기(python, SQL, 웹크롤링, flask)
데이터가 없더라도 혼자 데이터를 확보, 공개 할 수 있는 방법 연습하기
처음 롤모델이었던 사이트 _ https://www.kpop-radar.com/BTS
📌 flask 블로그 기능 목표
포트폴리오를 위한 블로그 글 작성 기능
연락처 확보를 위한 구독 기능
회원을 구별하기 위한 로그인 기능
각 데이터를 MySQL에 저장
📐 데이터베이스 _ MySQL & mongodb _
보안, 안정성을 위해 MySQL을 사용(변경 여지가 클 경우, 로깅을 위해 NoSQL사용이 적합)
객체 생성시 느려지는 현상을 막고자 pymysql 사용 (SQLAchemy는 사용하지 않음) -
mysql -u root
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';
# root:아이디/localhost:자기피시로 접속 할 경우 모든 권한 확보
CREATE USER '아이디'@'localhost' IDENTIFIED BY '비밀번호';
# 아이디 생성
GRANT ALL PRIVILEGES ON *.* TO 'ID'@'localhost';
# 아이디에 권한 부여
flush privileges;
# mysql데이터서버에 저장
CREATE DATABASE dbname;
# 연결할 데이터베이스 생성
show databases;
#데이터 베이스 리스트 확인
show tables;
#테이블 확인
만약 에러 발생시 - RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods ㄴ pip install cryptograpyh명령어를 통하여 해결 가능
show tables;
# 필드 설정 확인
# DESC 테이블명;
DESC student_tb;
🍀tip: ex_SQL 테이블&필드 수정
# 필드 추가
# ALTER TABLE 테이블명 add 새로추가할필드명과 타입 after 필드이름;
ALTER TABLE student_tb ADD cm int AFTER name;
# 필드 삭제
# ALTER TABLE 테이블명 drop 삭제할 필드명;
ALTER TABLE student_tb DROP cm;
# 필드 수정
# ALTER TABLE 테이블명 change 기존 필드명 새로운 필드명 타입;
ALTER TABLE student_tb CHANGE cm tall int;
# 타입 변경
# ALTER TABLE 테이블명 modify 기존 필드명 새로운 타입;
ALTER TABLE student_tb MODIFY cm int;
# 이름 변경
# ALTER TABLE 기존 테이블 이름 rename 새 테이블 이름;
ALTER TABLE student_tb RENAME class_tb;
# 테이블 삭제
drop table 삭제할 테이블명;
🖥 MongoDB 설치
brew install mongodb-community # 프로그램 설치
brew services start mongodb-community # 프로그램 서비스 시작
brew services restart mongodb-community # 재시작
mongodb 설치 명령어 사용 후 에러 발생 시 - Warning: No available formula with the name "mongodb-community". ㄴ 필요에 따라 xcode-select --install ㄴ brew tap mongodb/brew 명령어를 통하여 해결 가능 [자세한설명]
⌨️ MongoDB 연결
import pymongo #mongodb 라이브러리 소환
#주로 사용된 기본 형식
username = ''
password = ''
ip_address = 'localhost'
connection = pymongo.MongoClient('mongodb://%s:%s@%s' % (username, password, ip_address))
from flask import Flask
from flask_login import LoginManager
app = Flask(__name__) # flask 객체 생성
login_manager = LoginManager()
login_manager.init_app(app) # app 에 login_manager 연결
⌨️사용자클래스에필요한속성들
- is_authenticated : 인증된 경우 True, 그렇지 않은 경우 False
- is_active: 계정이 활성화된 경우 True, 그렇지 않은 경우 False
- is_anonymous : 익명 사용자는 True, 그렇지 않은 경우 False
- get_id() : 사용자의 고유 식별 문자를 보여주는 메소드
🍀tip: app.secret_key
app.secret_key = os.urandom(24)
- secret_key는 서버상에 동작하는 어플리케이션 구분하기 위해 사용하고 복잡하게 만들것을 권장 - login_manager의 Session Protection옵션을 설정하여 보안을 더 올리는 방법도있음