AccountApp 기능을 구현한 게 어쨌든 유저관련이니까, authentication을 완성해야 진짜다.
if request.user.is_authenticated:
<원래있던내용>
else:
return HttpResponseRedirect(reverse('accountapp:login'))
views.py updateview나 deleteview에 get이나 post요청을 받을 경우 authenticated인지를 검사하는 기능을 추가한다.

def get(self, *args, **kwargs):
if self.request.user.is_authenticated and self.get_object() == self.request.user:
return super().get(*args, **kwargs)
else:
return HttpResponseForbidden()
def post(self, *args, **kwargs):
if self.request.user.is_authenticated and self.get_object() == self.request.user:
return super().post(*args, **kwargs)
else:
return HttpResponseForbidden()
이 구문을 추가해준다. get요청이든 post요청이든 authenticated 되어있으면서 자격이 있는 유저여야만 할 수 있도록. authenticated 인지만 확인한다면 6번유저가 2번유저의 정보를 마음대로 바꾸고 지울 수가 있다.
얘도 마찬가지로...

from django.contrib.auth.decorators import login_required
이 구문으로 login_required를 import부터 해주고.
이전에 if else로 authenticated 여부를 체크했던 거 싹 지워준다.

Update나 Delete View는 함수형이 아니고 클래스라서 적용이 안된다.
그래서 @method_decorator 라는 걸 사용해주어야 한다.
@method_decorator(login_required, 'get')
@method_decorator(login_required, 'post')
이런 식으로 class 안에 있는 get이나 Post함수에 적용이 가능하다.

데코레이터 파이썬파일을 하나 만들어줍니다.

from django.contrib.auth.models import User
from django.http import HttpResponseForbidden
def account_authorized(func):
def decorated(request, *args, **kwargs):
user = User.objects.get(pk=kwargs['pk'])
if not user == request.user:
return HttpResponseForbidden()
return func(request, *args, **kwargs)
return decorated
안에서 이런식으로 커스텀을 해줍니다.
has_ownership = [login_required, account_authorized]
이런 식으로 배열을 만들어서 method_decorator에 넣어줄 수 있다.

@method_decorator(has_ownership, 'get')
@method_decorator(has_ownership, 'post')
python manage.py createsuperuser
대충 yoodeit에 redjango0827로 해줬다.
pip install pillow
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')