파이썬 장고 실무 기초(3)
사용자 관리와 로그인 - 회원가입 기능 만들기
* GET 과 POST 활용하기
user의 views.py sign_up_view에 POST 추가하기
user앱의 views.py의 sign_up_view 함수에 HTTP 요청 방식을 구분 하는 코드를 추가
# user/views.py
def sign_up_view(request):
if request.method == 'GET': # GET 메서드로 요청이 들어 올 경우
return render(request, 'user/signup.html')
elif request.method == 'POST': # POST 메서드로 요청이 들어 올 경우
return ""
HTML에서 form태그 설정
- signup.html의 <form>태그 의 속성에 method와 action을 추가 하려고 해요! 아래의 코드를 form태그에 적용
<!-- 윗 부분 생략 -->
<div class="wrap">
<h2 class="title-center"> 회원가입 </h2>
<form class="form-area" method="post" action="/sign-up/">
{% csrf_token %} <!-- {% csrf_token %} 은 Django에서 post 할 때에 보안을 위해서 사용 -->
<div class="form-group mt-2 mb-2">
<label for="username">이름</label>
<input type="text" class="form-control" id="username" name="username">
</div>
<div class="form-group mt-2 mb-2">
<!-- 아랫 부분 생략 -->
* <form>태그의 가장 마지막에 있는 <button type="submit" class="btn btn-primary">회원가입</button> 버튼은, form태그의 method로 action에 데이터를 보내주는 역할을 한다.
* {% csrf_token %} 은, Django에서 post 할 때에 보안을 위해서 사용 해 주어야 합니다. post 메서드를 만들때 자주 사용 할 예정이니 명심!user의
views.py에서 전송되는 데이터 받아서 저장하기
- html의 input에 입력 했던 친구들은 각각 username, password, password2, bio로 sign_up_view()함수로 적용
- html에서 넘겨준 데이터를 views.py에서 받아줍니다.
- password와 password2가 일치하는지 확인 해 주고, 일치하면 저장 해 줍니다.
- user앱의 views.py의 sign_up_view함수에 아래와 같이 추가 해 주겠습니다.
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:
new_user = UserModel()
new_user.username = username
new_user.password = password
new_user.bio = bio
new_user.save()
return redirect('/sign-in')
* redirect 함수를 이용해서, 저장 완료 되었다면 로그인 페이지 인 /sign-in url로 이동 하게 해 준다.
사용자 관리와 로그인 - 로그인 기능 만들기
user model을 사용한 로그인 절차 만들기
url, view 세팅하기
- views.py의 sign_in_view에 POST 를 추가
# 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')
signin.html 의 form 태그 속성 넣기
- 작성한 url과 view로 html에서 데이터를 넘겨주어야 합니다.
- signin.html의 `form태그`에 action과 method를 추가
<!-- 윗부분 생략 -->
<div class="wrap">
<h2 class="title-center"> 로그인</h2>
<form class="form-area" action="/sign-in/" method="post">
{% csrf_token %}
<div class="form-group mt-2 mb-2">
<!-- 아랫 부분 생략 -->
view의 로그인 작업 마무리하기
- username, password가 /sign-in으로 전달 되기 때문에, 'sign_in_view'함수가 실행이 됩니다.
- user앱의 sign_in_view 함수에 로그인 기능들을 추가
# user/views.py
def sign_in_view(request):
if request.method == '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')
view의 로그인 작업 마무리하기(2)
- 조건문을 통해서 요청 메서드가 POST인지 검사
- username과 password를 받아서 패스워드를 검사
- view의 로그인 작업 마무리하기(3)
- UserModel을 사용해서 사용자를 불러오기
- user앱의 views.py에 있는 sign_in_view 함수를 아래와 같이 추가
# 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')
User모델 업그레이드 하기
user앱의 models.py
아래 내용을 응용해서, 장고의 유저 모델 + 내가 만든 모델 합치기
기존)
# user/models.py
from django.db import models
# Create your models here.
class UserModel(models.Model):
class Meta:
db_table = "my_user" # 여기는 테이블 이름이에요! 꼭 기억 해 주세요!
username = models.CharField(max_length=20, null=False)
password = models.CharField(max_length=256, null=False)
bio = models.CharField(max_length=256, default='')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
업그레이드)
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class UserModel(AbstractUser): # 수정 부분
class Meta:
db_table = "my_user" # 여기는 테이블 이름이에요! 꼭 기억 해 주세요!
bio = models.TextField(max_length=500, blank=True)
처음 만든 mySpartaSns라는 앱에 우리가 auth_user 모델을 바꾸었다고 알려주기
mySpartaSns앱의 settings.py에 추가하기
# mySpartaSns/settings.py
AUTH_USER_MODEL = 'user.UserModel'
Django에게 기본 인증과정 (AUTH_USER_MODEL)을 user앱에 작성한 UserModel로 사용하겠다! 라고 알려주는 과정
User모델을 데이터베이스에 적용시키기
makemigrations 와 migrate
터미널을 클릭 해 주고, 아래와 같은 명령어를 순서대로 입력
python manage.py makemigrations
python manage.py migrate
개인과제가 시작되었는데... 이미 꺾였어... 그래도 한번 해볼게...!
'내배캠 > TIL' 카테고리의 다른 글
TIL/20/20230407 (0) | 2023.04.07 |
---|---|
TIL/19/20230406 (1) | 2023.04.07 |
TIL/17/20230404(수정중) (0) | 2023.04.04 |
TIL/16/20230403 (4) | 2023.04.03 |
TIL/15/20230331 (0) | 2023.04.03 |