반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 플랙스박스기본
- ubuntu
- 관계형데이터베이스
- Eclipse
- spring
- Flex Box 기본
- 자바 스프링
- 람다식
- spring 환경설정
- 타입
- 스프링
- 자바스프링
- SQL 명령어
- numpy
- 객체지향프로그래밍
- 노마드코더
- Hooks
- java spring
- 환경설정
- 이클립스
- SQL
- SQL 문제
- 오산대맛집
- 리액트
- REACT
- java설치
- Flexbox Froggy
- HTML5
- node.js
- SQL 연산자
Archives
- Today
- Total
이것저것
(7) 로그인 로그아웃 구현 본문
반응형
SMALL
spring boot와 MySQL로 구현하게 되어서 급하게 마무리해본다...
먼저 templates/auth 폴더에 login.html 파일을 만든다
{% extends "base.html" %}
{% block content %}
<div class="container">
<h5 class="my-3 border-bottom pb-2">로그인</h5>
<form method="post">
{{ form.csrf_token }}
{% include "form_errors.html" %}
<div class="mb-3">
<label for="email">사용자 이메일</label>
<input type="text" class="form-control" name="email" id="email"
value="{{ form.email.data or '' }}">
</div>
<div class="mb-3">
<label for="password">비밀번호</label>
<input type="password" class="form-control" name="password" id="password"
value="{{ form.password.data or '' }}">
</div>
<button type="submit" class="btn btn-primary">로그인</button>
</form>
</div>
{% endblock %}
auth_views.py에 로그인 폼과 로그인 여부, 로그아웃 라우팅을 추가한다.
from flask import Blueprint, url_for, render_template, flash, request, session, g
from werkzeug.security import generate_password_hash, check_password_hash
from werkzeug.utils import redirect
from server.pybo import db
from server.pybo.forms import UserCreateForm, UserLoginForm
from server.pybo.models import Users
bp = Blueprint('auth', __name__, url_prefix='/auth')
# 회원가입 폼 입력받기
@bp.route('/signup', methods=('GET', 'POST'))
def signup():
form = UserCreateForm()
if request.method == 'POST' and form.validate_on_submit():
user_by_email = Users.query.filter_by(email=form.email.data).first()
user_by_nickname = Users.query.filter_by(nickname=form.nickname.data).first()
if user_by_email:
flash('이미 사용 중인 이메일입니다.')
elif user_by_nickname:
flash('이미 사용 중인 닉네임입니다.')
else:
users = Users(
nickname=form.nickname.data,
users_name=form.users_name.data,
password=generate_password_hash(form.password1.data),
email=form.email.data,
users_birth=form.users_birth.data,
users_phone=form.users_phone.data,
address_main=form.address_main.data,
address_sub=form.address_sub.data
)
db.session.add(users)
db.session.commit()
return redirect(url_for('main.index'))
return render_template('auth/signup.html', form=form)
# 로그인 폼
@bp.route('/login', methods=('GET', 'POST'))
def login():
form = UserLoginForm()
if request.method == 'POST' and form.validate_on_submit():
error = None
user = Users.query.filter_by(email=form.email.data).first()
if not user:
error = "존재하지 않는 이메일입니다."
elif not check_password_hash(user.password, form.password.data):
error = "비밀번호가 올바르지 않습니다."
if error is None:
session.clear()
session['users_id'] = user.users_id
return redirect(url_for('main.index'))
flash(error)
return render_template('auth/login.html', form=form)
# 로그인 여부 확인
@bp.before_app_request
def load_logged_in_user():
users_id = session.get('users_id')
if users_id is None:
g.user = None
else:
g.user = Users.query.get(users_id)
# 로그아웃 라우팅
@bp.route('/logout')
def logout():
session.clear()
return redirect(url_for('main.index'))
pybo에 forms.py에 로그인폼을 추가해준다.
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, EmailField
from wtforms.validators import DataRequired, Length, EqualTo, Email
# 회원가입 폼
class UserCreateForm(FlaskForm):
nickname = StringField(
'아이디',
validators=[DataRequired(), Length(min=3, max=25)]
)
users_name = StringField(
'사용자 이름',
validators=[DataRequired(), Length(min=3, max=25)]
)
password1 = PasswordField(
'비밀번호',
validators=[
DataRequired(), EqualTo('password2', '비밀번호가 일치하지 않습니다.')]
)
password2 = PasswordField(
'비밀번호확인',
validators=[DataRequired()]
)
email = EmailField(
'이메일',
validators=[DataRequired(), Email()]
)
users_birth = StringField(
'생년월일',
validators=[DataRequired(), Length(min=8, max=8, message='생년월일은 8자리여야 합니다. ex)19961020')]
)
users_phone = StringField(
'전화번호',
validators=[DataRequired(), Length(min=10, max=15)] # 전화번호 형식에 맞춰 길이를 조정하세요.
)
address_main = StringField(
'주소',
validators=[DataRequired()]
)
address_sub = StringField(
'상세주소',
validators=[DataRequired()]
)
# 로그인폼
class UserLoginForm(FlaskForm):
email = StringField('사용자 이메일', validators=[DataRequired(), Email()])
password = PasswordField('비밀번호', validators=[DataRequired()])
이제 run_dms로 실행후 확인해보면 로그인 전과 로그인 후에 navbar가 다른것을 확인할 수 있다...
여기까지 한건 git에 올려놨는데
차마 남한테 보여주기 민망해서 올리지는 못하겠다
1~7번까지 폴더만 잘 복붙해도 돌아갈꺼같다
혹시 빠진 부분이 있으면 알려주시면 수정하겠습니다
아니면 깃코드가 필요하신분은 댓글 남겨주시면 링크를 보내드리겠습니다
반응형
LIST
'Python' 카테고리의 다른 글
(6) 회원가입 구현하기 (1) | 2023.11.26 |
---|---|
(5) Flask Jinja2를 사용해 표준 HTML과 템플릿 상속 사용하기 (0) | 2023.11.25 |
(4) 메인 페이지 및 bootstrap, navbar 설정 (0) | 2023.11.25 |
(3) 모델 생성하기 (5) | 2023.11.23 |
(2) pycharm에 mysql 불러오기 (2) | 2023.11.22 |
Comments