from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden
from django.shortcuts import render
# Create your views here.
#view 단의 완성
from django.urls import reverse, reverse_lazy
from django.utils.decorators import method_decorator
from django.views.generic import CreateView, DetailView, UpdateView, DeleteView
from accountapp.models import HelloWorld
from accountapp.templates.accountapp.decorators import account_ownership_required
from accountapp.templates.accountapp.forms import AccountUpdateForm
has_ownership = [account_ownership_required, login_required]
@login_required
def hello_world(request):
if request.user.is_authenticated:
if request.method == "POST":
# 포스트가 완료한이후에 겟으로 되돌아가서 남아있는 글들을 지울 수 있게한다.
temp = request.POST.get("hello_world_input")
new_hello_world = HelloWorld()
new_hello_world.text = temp
new_hello_world.save()
hello_world_list = HelloWorld.objects.all() #헬로월드에 모든 데이터를 다 긁어온다.
return HttpResponseRedirect(reverse('accountapp:hello_world'))
# 포스트가 완료한이후에 겟으로 되돌아가서 남아있는 글들을 지울 수 있게한다. redirect
# URL에서 ACCOUNT를 가져온다. 해당 경로를 만들어줄 함수를 쓴다
else:
return HttpResponseRedirect(reverse('accountapp:login'))
#view는 만들었고 이제 route해줘야한다.
#특정 주소를 만들어 주는 작업이 필요하다.
class AccountCreateView(CreateView):
model = User
form_class = UserCreationForm
success_url = reverse_lazy('accountapp:hello_world') #여기서 reverse를 사용불가 클래스형
#reverse는 함수형에서 사용한다.
template_name = 'accountapp/create.html'
class AccountDetailView(DetailView):
model = User
context_object_name = 'target_user'
template_name = 'accountapp/detail.html'
@method_decorator(has_ownership,'get')
@method_decorator(has_ownership,'post')
class AccountUpdateView(UpdateView):
model = User
context_object_name = 'target_user'
form_class = AccountUpdateForm
success_url = reverse_lazy('accountapp:hello_world') #여기서 reverse를 사용불가 클래스형
#reverse는 함수형에서 사용한다.
template_name = 'accountapp/update.html'
@method_decorator(has_ownership,'get')
@method_decorator(has_ownership,'post')
class AccountDeleteView(DeleteView):
model = User
context_object_name = 'target_user'
success_url = reverse_lazy('accountapp:login')
template_name = 'accountapp/delete.html'
decorate.py
from django.contrib.auth.models import User
from django.http import HttpResponseForbidden
def account_ownership_required(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
'Computer Science > Django_pinterest' 카테고리의 다른 글
210824 장고 커밋 30 Profileapp 시작 그리고 ModelForm (0) | 2021.08.24 |
---|---|
210824 장고 커밋 29 superuser, media 관련 설정 (0) | 2021.08.24 |
210821 장고 27 커밋, 타 아이디로 접속이 되는 기능, 탈퇴 거부 (0) | 2021.08.21 |
210821 장고 26커밋, DeleteView기반 회원탈퇴 구현 (0) | 2021.08.21 |
210821 장고 25커밋, UpdateView를 이용한 비밀번호 변경 구현 (0) | 2021.08.21 |