Django/▶-----Pystagram
[Django App 3-5] 인스타그램 클론 코딩_회원가입&로그인 수정, 로그아웃
Liiot
2020. 2. 15. 15:43
<Complete List>
1. 데이터베이스 및 UI 설계하기
- 인스타그램 UI 구성
- 데이터베이스 테이블 설계 및 구현
2. 앱 만들기
- instagram, accounts 앱 만들기
- views.py 분리하기
3. 회원가입 페이지
- url
- view
- 비밀번호 암호화 함수 구현 - 해시 함수
- template
4. 로그인 페이지
- url
- view
- 세션에 사용자 ID 저장하기
- template
<To Do List>
- Django 인증 시스템을 활용하여 회원가입, 로그인 뷰 개발
- urls.py에서 기존 매칭된 뷰들을 새로 구현한 뷰들로 변경
5. 로그아웃 뷰
- url
- view
urls.py 변경
- urls.py에서 기존 매칭된 뷰들을 새로 구현한 뷰들로 변경
urlpatterns = [
re_path(r'^register/$', RegisterAccountsView, name='pn_reg_accounts'),
re_path(r'^login/$', LoginView, name='pn_login'),
]
회원가입 - RegisterAccountsView
- Django 인증 시스템을 활용하여 회원가입 뷰 개발
def RegisterAccountsView(request):
if request.method == 'GET':
renderPage = 'reg_accounts.html'
return render(request, renderPage)
else:
email = request.POST.get('email')
name = request.POST.get('name')
user_id = request.POST.get('user_id')
user_pw = request.POST.get('user_pw')
try:
user = User.objects.get(username=user_id)
messages.error(request, '이미 존재하는 아이디입니다. 다른 아이디를 사용해주세요.')
return redirect('accounts:pn_reg_accounts')
except ObjectDoesNotExist:
user = User.objects.create_user(username=user_id, password=user_pw, email=email, first_name=name)
messages.success(request, '회원가입이 되었습니다. 로그인을 해주세요.')
return redirect('accounts:pn_login')
-
200220 수정:
존재하지 않는 데이터일 때
accounts.models.User.DoesNotExist: User matching query does not exist
에러 발생따라서, 이에 대한
ObjectDoesNostExist
예외 처리를 해줘야 한다.
로그인 - LoginView
- Django 인증 시스템을 활용하여 로그인 뷰 개발
def LoginView(request):
if request.method == 'GET':
render_page = "login.html"
return render(request, render_page)
else:
user_id = request.POST.get('user_id')
user_pw = request.POST.get('user_pw')
# username과 password로 자격 증명
user = authenticate(request, username=user_id, password=user_pw)
if user is not None:
login(request, user=user)
return redirect('pystagram:pn_main')
else:
messages.error(request, '아이디 혹은 비밀번호가 틀렸습니다. 다시 입력해주세요.')
return redirect('accounts:pn_login')
5. 로그아웃 뷰
5.1 url
urlpatterns = [
re_path(r'^register/$', RegisterAccountsView, name='pn_reg_accounts'),
re_path(r'^login/$', LoginView, name='pn_login'),
re_path(r'^logout/$', LogoutView, name='pn_logout'),
]
5.2 LogoutView
def LogoutView(request):
logout(request)
return redirect('accounts:pn_login')