[ 작업환경 ]
Centos 7.7
Flask 1.1
Python 3.7
1. DB 변경
아래와 같이 DB 정보 변경했습니다. 참고하여 동일하게 설정해주세요.
2. sql 쿼리를 날리고 데이터를 가져오는 부분들에 대한 내용을 app001/models.py 로 넣기
from flask_mysqldb import MySQL
import MySQLdb.cursors
from app001.routes import app
app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'cluser'
app.config['MYSQL_PASSWORD'] = 'zmffnwj2020'
app.config['MYSQL_DB'] = 'pythondb'
app.config['MYSQL_PORT'] = 33906
# Intialize MySQL
mysql = MySQL(app)
class User():
def login_check(username, password):
# MySQL DB에 해당 계정 정보가 있는지 확인
cursor = mysql.connection.cursor(MySQLdb.cursors.DictCursor)
cursor.execute('SELECT * FROM accounts WHERE username = %s AND password = %s', (username, password))
# 값이 유무 확인 결과값 account 변수로 넣기
account = cursor.fetchone()
return account
def get_information(id):
cursor = mysql.connection.cursor(MySQLdb.cursors.DictCursor)
cursor.execute('SELECT * FROM accounts WHERE id = %s', id)
account = cursor.fetchone()
return account
3. models.py 로 넘어간 내용 routes.py 에서 제거하기
# vim app001/routes.py
from flask import render_template, request, redirect, url_for, session
import re
from app001 import app
from app001.models import User
app.secret_key = 'your secret key'
# http://host:5005/login/ - this will be the login page, we need to use both GET and POST requests
@app.route('/login/', methods=['GET', 'POST'])
def login():
# Output message if something goes wrong...
msg = ''
# Check if "username" and "password" POST requests exist (user submitted form)
# username과 password에 입력값이 있을 경우
if request.method == 'POST' and 'username' in request.form and 'password' in request.form:
# 쉬운 checking을 위해 변수에 값 넣기
username = request.form['username']
password = request.form['password']
account = User.login_check(username, password)
# 정상적으로 유저가 있으면 새로운 세션 만들고, 없으면 로그인 실패 문구 출력하며 index 리다이렉트
if account:
session['loggedin'] = True
session['id'] = account['id']
session['username'] = account['username']
#return 'Logged in successfully!'
return redirect(url_for('home'))
else:
msg = 'Incorrect username/password!'
# Show the login form with message (if any)
return render_template('index.html', msg=msg)
# http://host:5005/home - this will be the home page, only accessible for loggedin users
@app.route('/home')
def home():
# Check if user is loggedin
if 'loggedin' in session:
# User is loggedin show them the home page
return render_template('home.html', username=session['username'])
# User is not loggedin redirect to login page
return redirect(url_for('login'))
# http://host:5005/logout - this will be the logout page
@app.route('/logout')
def logout():
# Remove session data, this will log the user out
session.pop('loggedin', None)
session.pop('id', None)
session.pop('username', None)
# Redirect to login page
return redirect(url_for('login'))
# http://host:5005/profile - this will be the profile page, only accessible for loggedin users
@app.route('/profile')
def profile():
# Check if user is loggedin
if 'loggedin' in session:
account = User.get_information([session['id']])
# Show the profile page with account info
return render_template('profile.html', account=account)
# User is not loggedin redirect to login page
return redirect(url_for('login'))
3. 서버 정상 작동 및 정상 로그인 확인
'Development > Flask with Python' 카테고리의 다른 글
[Flask1.1][Mysql] 실습 - 7 : 회원가입 기능 구현하기 (0) | 2020.01.16 |
---|---|
[Flask1.1][Mysql] 실습 - 6 : 로그인시 접속한 기기의 IP 정보 받기 & 로그인 페이지 리다이렉트 기능 추가 (0) | 2020.01.06 |
[Flask1.1][Mysql] 실습 - 4 : 서버 Port 변경하기 (0) | 2020.01.06 |
[Flask1.1] client의 IP 정보 가져오기 (0) | 2020.01.05 |
[Flask1.1][Mysql] 실습 - 3 : 프로필 화면 추가 및 프로필 링킹 버튼 정상화 (0) | 2020.01.02 |