📢 공지사항
home

Profileapp 마무리

복습
수강일
수강일_
숫자
32
주차
2주차
체크
태그
Profileapp Implementaion

UpdateView

accountapp에서 만들었던 updateview를 그대로 복사한다.
class ProfileUpdateView(UpdateView): model = Profile context_object_name = 'targat_profile' form_class = ProfileCreationForm success_url = reverse_lazy('accountapp:hello_world') template_name = 'profileapp/update.html'
Python
복사
url path도 라우팅 해준다
path('update/<int:pk>', ProfileUpdateView.as_view(), name = 'update'),
Python
복사
update.html도 account에서 가져온다.
{% extends 'base.html' %} {% load bootstrap4 %} {% block content %} <div style = "text-align: center; max-width: 600px; margin: 4rem auto"> <div class="mb-4"> <h4>Update Profile</h4> </div> <form action="{% url 'profileapp:update' pk=target_profile.pk %}" method="post" enctype="multipart/form-data"> {% csrf_token %} {% bootstrap_form form %} <input type="submit" class="btn btn-dark rounded-pill col-6 mt-3"> </form> </div> {% endblock %}
Python
복사
Update Profile로 바꿔주고, url ‘profileapp:update’ pk=target_profile.pk 로 바꿔준다
form action에서도, 사진을 받아야하니 enctype=”multipart/form-data”로 만들어준다.
detatil view에서도 profile을 수정하는 링크를 라우팅해준다.
<a href=”url ‘profileapp:update’ pk=target_user.profile.pk”> edit </a>
Python
복사
detail에서 프로필의 이미지도 볼 수 있게 해준다.
<img src="{{ target_user.profile.image.url }}" alt="">
Python
복사
위와 같이 입력하면 라우팅을 안 해놔서 사진이 안 나온다.
settings.py에서 media 라우팅을 해준걸 pragmatic/urls.py에서 라우팅을 해줘야한다.
from django.conf.urls.static import static from django.conf import settings path('profile/', include('profileapp.urls')), ] + static(settings.MEDIA_URL, document_root=setting.MEDIA_ROOT)
Python
복사
profile message도 detail에서 출력해준다.
<h5> {{ target_user.profile.message }} </h5>
Python
복사

Profile Decorator

from django.http import HttpResponseForbidden def profile_ownership_required(func): def decorated(request, *args, **kwargs): profile = Profile.objects.get(pk=kwargs['pk]) if not profile.user ==request.user: return HttpResponseForbidden return func(request, *args, **kwargs) return decorated
Python
복사
view단에서 똑같이 method_decorator로 보안사항을 등록해준다.