오늘은 지난번 프로젝트에서 부족했던 부분에 대해 복습 하는 시간을 가지고,
심화수업을 들었다.
먼저 오늘 복습한 내용에 대해
이야기해보겠다.
초기 셋팅 방법은 많이 하다보니 익숙 해졌다.
오늘은 회원에대한 CRUD에 복습해보았다
users/model.py
from django.db import models
from django.contrib.auth.models import AbstractUser
from django.conf import settings
# Create your models here.
class User(AbstractUser):
email = models.EmailField(verbose_name = "email", max_length = 255, unique = True)
username = models.CharField(max_length=30)
nickname = models.CharField(max_length=50, blank=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
follow = models.ManyToManyField(settings.AUTH_USER_MODEL,related_name='followee')
기본적으로 회원가입 할 때는 아이디로 로그인 하지만.
메일로 바꿔서 로그인하기 위해
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
사용하였고,
팔로우기능도 추가 하기위해
follow = models.ManyToManyField(settings.AUTH_USER_MODEL,related_name='followee')
사용하였다.
from django.http import HttpRequest, HttpResponse
from django.shortcuts import render, redirect
from .models import User
from django.contrib.auth import authenticate, login as loginsession
from django.contrib.auth.decorators import login_required
from django.contrib import auth
from django.contrib.auth.hashers import check_password
from django.contrib.auth import get_user_model
def login(request): #로그인
if request.method == 'GET':
return render(request, 'user/login.html')
elif request.method == 'POST':
email = request.POST.get('email')
password = request.POST.get('password')
user = authenticate(request, email=email , password=password)
if user is not None:
loginsession(request, user)
return redirect("/home/")
else:
return render(request, 'user/login.html', {'error':'이메일 또는 패스워드를 확인해 주세요!'})
def signup(request): #회원가입
if request.method == 'GET':
return render(request, 'user/signup.html')
elif request.method == 'POST':
email = request.POST.get('email', '')
username = request.POST.get('username', '')
nickname = request.POST.get('nickname', '')
password = request.POST.get('password', '')
password2 = request.POST.get('password2', '')
if password != password2:
return render(request, 'user/signup.html', {'error': '패스워드를 확인 해 주세요!'})
elif email == '' or password == '':
return render(request, 'user/signup.html', {'error': '이메일과 패스워드를 입력해주세요.'})
else:
exist_user = get_user_model().objects.filter(email=email)
if exist_user:
return render(request, 'user/signup.htmle')
else:
User.objects.create_user(email=email, username=username, password=password, nickname=nickname)
return render(request, 'login.html') # 회원가입이 완료되었으므로 로그인 페이지로 이동
@login_required
def logout(request): #로그아웃 함수
auth.logout(request) # 인증 되어있는 정보를 없애기
return redirect("/")
@login_required
def delete(request): #회원탈퇴
if request.user.is_authenticated:
request.user.delete()
return render(request, 'user/signup.html')
@login_required
def update(request, id): # 회원정보 수정
if request.method =='POST':
user = User.objects.get(id=id)
user.username = request.POST.get('username')
user.save()
else:
return render(request, 'user/profile_edit.html')
@login_required
def password(request, id):
context= {}
if request.method == "POST":
current_password = request.POST.get("origin_password" ,"id=id" )
user = request.user
if check_password(current_password,user.password):
new_password = request.POST.get("password1")
password_confirm = request.POST.get("password2")
if new_password == password_confirm:
user.set_password(new_password)
user.save()
auth.login(request,user)
return redirect("/logout")
else:
context.update({'error':"새로운 비밀번호를 다시 확인해주세요."})
else:
context.update({'error':"현재 비밀번호가 일치하지 않습니다."})
return render(request, "user/change_pw.html")
이번 기회에 함수 사용방법에 대해 많이 익숙해졌다.
역시 코딩은 작동 흐름 을 이해 해야 되는것같다.
구현하기 수많은 오류를 만났지만 다행이도 오류 코드를 보며 해결 해 나갔다.
이제는 어디서 문제인지 어떻게 해결 해야 되는 방법을 찾는것 이 많이 수월해졌다.
완료 화면이다.
작동은 잘되서 만족한다.
물론 로그인,회원탈퇴,비번변경도 구현하였다.
'TIL(Daily) > ETC' 카테고리의 다른 글
Mon/31/Oct/22 Django심화 (0) | 2022.11.01 |
---|---|
Fri/28/Oct/22 -Django 심화 (0) | 2022.11.01 |
Tue/25/Oct/22 - Django심화 -2 (0) | 2022.10.27 |
Mon/24/Oct/22/ Django심화-1 (0) | 2022.10.25 |
Fri/21/Oct/22 -머신러닝 프로젝트 5 (0) | 2022.10.22 |
댓글