본문 바로가기
TIL(Daily)/ETC

Wen/26/Oct/22-CRUD복습

by Hawie 2022. 10. 27.

오늘은 지난번 프로젝트에서 부족했던 부분에 대해 복습 하는 시간을 가지고,

심화수업을 들었다.

 

먼저 오늘 복습한 내용에 대해 

이야기해보겠다.

 

초기 셋팅 방법은 많이 하다보니 익숙 해졌다.

오늘은 회원에대한 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

댓글