반응형
스파르타 코딩클럽 내일배움캠프 AI 웹개발자양성과정 3회차
2022.09.30. 23일차 - TIL
1. Django 원격 강의
- 로그인 이후 기능 다듬기
- django 템플릿 : 파이썬을 html로 바꿔주어, 빠르고 쉽게 동적인 웹 사이트를 만들게 도움
- 왼쪽 card에 사용자의 정보를 보여주기 위해 tweet 폴더의 home.html 변경
<!-- templates/tweet/home.html -->
<!-- 왼쪽 컬럼 -->
<div class="col-md-3">
<div class="card">
<div class="card-body">
<!--<h5 class="card-title">Card title</h5>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of
the card's content.</p> -->
<h5 class="card-title">{{ user.username }}</h5> <!-- 사용자의 이름 -->
<p class="catd-text">{{ user.bio }}</p> <!-- 사용자의 상태메시지 -->
</div>
</div>
</div>
- 상단 부분의 Sign In, Sign Up을 변경하기 위해 base.html 변경
<!-- templates/base.html -->
... 생략
<li class="nav-item">
<a class="nav-link" href="#"> 친구 <span class="sr-only"></span></a>
</li>
</ul>
</div>
<form class="form-inline my-2 my-lg-0">
{% if not user.is_authenticated %} <!-- user가 로그인 되어 있지 않을 때 Sign In, Sign Up을 보여줌 -->
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="/sign-in"> Sign In <span class="sr-only"></span></a>
</li>
<li class="nav-item active">
<a class="nav-link" href="/sign-up"> Sign Up <span class="sr-only"></span></a>
</li>
</ul>
{% else %} <!-- user가 로그인 되어있으면 username을 보여줌 -->
{{ user.username }} 님 반갑습니다!
{% endif%}
</form>
... 생략
- 로그인 필요 기능과 로그아웃 만들기
- 로그인 한 사람만 해당 tweet 페이지에 접근 가능하도록 만들기
- tweet 함수에 로그인한 사용자를 판단하는 기능 추가
- request.user.is_authenticated : 지금 요청을 보낸 사용자가 로그인 되어 있는 사용자가 맞는지 확인하는 함수
# tweet/views.py
from django.shortcuts import render, redirect
def tweet(request):
if request.method == 'GET' # 요청하는 방식이 GET 방식인지 확인하기
user = request.user.is_authenticated # 사용자가 로그인이 되어 있는지 확인하기
if user: # 로그인 한 사용자라면
return render(request, 'tweet/home.html') # tweet의 home.html 렌더링
else: # 로그인 되어 있지 않다면
return redirect('/sign-in') # 로그인 페이지로 이동
- 로그인 한 사람은 로그인, 회원가입 페이지로 들어가지 않고, 기본 페이지('/')로 되돌아 가도록 작업
- 회원가입 페이지와 연결되는 함수 sign_up_view와 로그인 페이지와 연결되는 함수 sign_in_view 수정
# user/views.py
def sign_up_view(request):
if request.method == 'GET':
user = request.user.is_authenticated # 로그인 된 사용자가 요청하는지 검사
if user: # 로그인이 되어있다면
return redirect('/') # url이 /인 home.html로 이동
else: # 로그인이 되어있지 않다면
return render(request, 'user/signup.html') # 회원가입 페이지로 이동
elif request.method == 'POST':
username = request.POST.get('username', None)
password = request.POST.get('password', None)
password2 = request.POST.get('password2', None)
bio = request.POST.get('bio', None)
if password != password2:
return render(request, 'user/signup.html')
else:
exist_user = get_user_model().objects.filter(username=username)
if exist_user:
return render(request, 'user/signup.html') # 사용자가 존재하기 때문에 사용자를 저장하지 않고 회원가입 페이지를 다시 띄움
else:
UserModel.objects.create_user(username=username, password=password, bio=bio)
return redirect('/sign-in') # 회원가입이 완료되었으므로 로그인 페이지로 이동
def sign_in_view(request):
if request.method == 'POST':
username = request.POST.get('username', None)
password = request.POST.get('password', None)
me = auth.authenticate(request, username=username, password=password) # 사용자 불러오기
if me is not None: # 저장된 사용자의 패스워드와 입력받은 패스워드 비교
auth.login(request, me)
return redirect('/')
else:
return redirect('/sign-in') # 로그인 실패
elif request.method == 'GET':
user = request.user.is_authenticated # 사용자가 로그인 되어 있는지 검사
if user: # 로그인이 되어있다면
return redirect('/')
else: # 로그인이 되어 있지 않다면
return render(request, 'user/signin.html')
- 로그아웃 기능 구현
# user/views.py에 다음 코드 추가
from django.contrib.auth.decorators import login_required
# 로그인 한 사용자만 접근할 수 있게 해주는 기능 -> 로그인을 하지 않을 경우 접근 불가
# request.user.is_authenticated는 로그인의 여부만 검증
@login_required
def logout(request):
auth.logout(request) # 인증 되어있는 정보를 없애기
return redirect("/")
# user/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('sign-up/', views.sign_up_view, name='sign-up')
path('sign-in/', views.sign_in_view, name='sign-in')
path('logout/', views.logout, name='logout') # 로그아웃 url 추가
]
<!-- templates/base.html -->
... 생략
<li class="nav-item">
<a class="nav-link" href="#"> 친구 <span class="sr-only"></span></a>
</li>
</ul>
</div>
<form class="form-inline my-2 my-lg-0">
{% if not user.is_authenticated %} <!-- user가 로그인 되어 있지 않을 때 Sign In, Sign Up을 보여줌 -->
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="/sign-in"> Sign In <span class="sr-only"></span></a>
</li>
<li class="nav-item active">
<a class="nav-link" href="/sign-up"> Sign Up <span class="sr-only"></span></a>
</li>
</ul>
{% else %} <!-- user가 로그인 되어있을때 -->
<ul class="navbar-nav mr-auto">
<li class="nav-item" disabled>
<span class="nav-link">
{{ user.username }} 님 반갑습니다! <!-- username을 보여줌 -->
</span>
</li>
<li class="navbar-nav mr-auto">
<li class="nav-item">
<a class="nav-link" href="/logout">로그아웃</a> <!-- 로그아웃을 보여줌 -->
</li>
</li>
{% endif%}
</form>
... 생략
반응형
'개발일지 > AI 캠프' 카테고리의 다른 글
내일배움캠프 AI - 24일차 TIL, 2022.10.05 (1) | 2022.10.05 |
---|---|
내일배움캠프 AI - 5주차 WIL (0) | 2022.10.04 |
내일배움캠프 AI - 22일차 TIL, 2022.09.29 (0) | 2022.09.30 |
내일배움캠프 AI - 21일차 TIL, 2022.09.28 (0) | 2022.09.29 |
내일배움캠프 AI - 20일차 TIL, 2022.09.27 (0) | 2022.09.28 |