목차
- model을 사용한 회원가입 기능 만들기
- model을 사용한 로그인 기능 만들기
- 회원가입 시에 이미 있는 사용자 인지 확인하는 코드만들기
- 사용자가 로그인을 성공한 후에 HttpResponse를 사용해서 화면에 '사용자 이름'을 출력하게 만들기
- 회원가입 페이지를 보여주는 URL('sign-up/')은 GET 방식으로 화면을 사용자에게 보여준다.
- 가입정보를 입력하고 전송 하는 url('sign-in/')은 POST 방식으로 서버로 데이터를 전송하여 저장한다.
- GET 요청 방식 : 값을 읽어올 떄
- POST 요청 방식 : 값을 서버로 주거나 수정, 삭제를 요청할 때
def sign_up_view(request):
if request.method == 'GET': # GET 메서드로 요청이 들어 올 경우
return render(request, 'user/signup.html')
elif request.method == 'POST': # POST 메서드로 요청이 들어 올 경우
return ""
{% csrf_token %}
: 장고 템플릿에서 사용되는 템플릿 태그 중 하나로 웹 브라우저가 사용자가 제출한 폼 데이터를 식별하고 검증하는 데 사용하며 CSRF(Cross-Site Request Forgery) 공격을 방지하기 위한 토큰을 생성하고 폼과 함께 제출할 때 사용한다. 쉽게 말해서 '보안 기능 자동 활성화'라고 보면 된다.<form> 태그
: 화면에 있는 데이터를 서버로 전송할 때 많이 쓰이는 태그이다.from django.shortcuts import render, redirect # 회원가입 버튼을 누르면 로그인 페이지로 이동하기 위해 redirect 임포트
from .models import UserModel # 내가 가진 앱(.)의 모델 중 UserModel을 가져온다.
def sign_up_view(request):
if request.method == 'GET':
return render(request, 'user/signup.html')
elif request.method == 'POST':
username = request.POST.get('username', None) # 'None' : 아직 데이터가 들어오지 않았다.
password = request.POST.get('password', None)
password2 = request.POST.get('password2', None)
bio = request.POST.get('bio', None)
if password != password2: # password와 password2가 다르면
return render(request, 'user/signup.html') # 회원가입 페이지를 다시 불러옴
else:
new_user = UserModel()
new_user.username = username
new_user.password = password
new_user.bio = bio
new_user.save()
return redirect('/sign-in') # redirect() 함수 : 특정 URL에서 다른 URL로 이동
서버와 클라이언트 사이에서 '요청'과 '응답'을 할 때 동일한 클라이언트가 요청하는지 확인할 수 있도록 도와주는 '세션'을 이용할 것이다.
- 세션
웹 애플리케이션의 사용자 상태를 유지하고 관리하기 위한 메커니즘 중 하나로, 세션을 사용하면 사용자가 로그인한 상태를 유지하거나 사용자 지정 데이터를 저장할 수 있다. 세션은 일반적으로 사용자 식별, 로그인 상태, 장바구니, 언어 설정 등과 같은 정보를 저장하는데 사용된다.
[user/views.py]
from django.http import HttpResponse
def sign_in_view(request):
if request.method == 'POST':
return HttpResponse("로그인 성공!")
elif request.method == 'GET':
return render(request, 'user/signin.html')
[user/views.py]
def sign_in_view(request):
if request.method == 'POST': # 조건문을 통해서 요청 메서드가 POST인지 검사
username = request.POST.get('username', None)
password = request.POST.get('password', None)
return HttpResponse("로그인 성공!")
elif request.method == 'GET':
return render(request, 'user/signin.html')
# user/views.py
def sign_in_view(request):
if request.method == 'POST':
username = request.POST.get('username', None)
password = request.POST.get('password', None)
me = UserModel.objects.get(username=username) # 사용자 불러오기
if me.password == password: # 저장된 사용자의 패스워드와 입력받은 패스워드 비교
request.session['user'] = me.username # 세션에 사용자 이름 저장
return HttpResponse("로그인 성공!")
else: # 로그인이 실패하면 다시 로그인 페이지를 보여주기
return redirect('/sign-in')
elif request.method == 'GET':
return render(request, 'user/signin.html')
me = UserModel.objects.get(username=username)
user/views.py - 회원가입 중복방지
# user/views.py
from django.shortcuts import render, redirect
from .models import UserModel
def sign_up_view(request):
if request.method == 'GET':
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 = UserModel.objects.filter(username=username) # 데이터베이스에서 'username'필드의 값 중에 사용자가 제공한 'username'과 같은 데이터를 가져온다.
if exist_user:
return render(request, 'user/signup.html') # 사용자가 존재하면 회원가입 페이지를 다시 띄움
else:
new_user = UserModel()
new_user.username = username
new_user.password = password
new_user.bio = bio
new_user.save()
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 = UserModel.objects.get(username=username) # 사용자 불러오기
if me.password == password: # 저장된 사용자의 패스워드와 입력받은 패스워드 비교
request.session['user'] = me.username # 세션에 사용자 이름 저장
return HttpResponse(me.username) # 사용자의 이름을 띄움
else:
return redirect('/login')
elif request.method == 'GET':
return render(request, 'user/signin.html')