728x90
5주차 시작!
월요일 시작부터 쪽지시험이라니
갑자기 생각도못한 시험이라 정신없이 오전 보냈네..
시험은 못봤지만
아무튼
오들도 화.이.팅!
[목차]
01. 사용자 관리와 로그인 - 회원가입 기능 만들기
02. 사용자 관리와 로그인 - 로그인 기능 만들기
03. User모델 업그레이드 하기
04. User모델을 데이터베이스에 적용시키기
01. 사용자 관리와 로그인 - 회원가입 기능 만들기
* GET 과 POST 활용하기
1) 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 ""
2) 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에 데이터를 보내주는 역할
3) 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로 이동 하게 해 줍니다.
02. 사용자 관리와 로그인 - 로그인 기능 만들기
1) 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">
<!-- 아랫 부분 생략 -->
위와 같이 form 태그 부분을 수정한다. // form태그는 이 두 친구들을 /sign-in url로 보내줍니다.
- 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')
03. User모델 업그레이드 하기
1) 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로 사용하겠다! 라고 알려주는 과정
04. User모델을 데이터베이스에 적용시키기
1) makemigrations 와 migrate
터미널을 클릭 해 주고, 아래와 같은 명령어를 순서대로 입력
python manage.py makemigrations
python manage.py migrate
728x90
반응형
'Sparta Coding Club > Today I Learned [TIL]' 카테고리의 다른 글
[TIL] #DAY - 021 - 프로젝트 준비! (내일배움캠프AI 3기) (1) | 2022.09.28 |
---|---|
[TIL] #DAY - 020 - 파이썬 장고 실무 기초 (4) (내일배움캠프AI 3기) (0) | 2022.09.27 |
[TIL] #DAY - 018 - 파이썬 장고 실무 기초 (2) (내일배움캠프AI 3기) (1) | 2022.09.24 |
[TIL] #DAY - 017 - 파이썬 장고 실무 기초 (1) (내일배움캠프AI 3기) (0) | 2022.09.22 |