📢 공지사항
home

Profileapp 마무리

수강계획
2022/01/12
번호
32
복습여부
수강여부
수강일
2022/01/13
속성
UpdateView CreateView랑 동일하게 구현(html 파일은 accountapp에서 가져오기)
이미지 파일 안보임! - 라우팅 해줘야함
jichuuu/urls.py에 미디어에 관련한 세팅하기
from django.conf import settings from django.conf.urls.static import static from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('accounts/', include('accountapp.urls')), path('profiles/', include('profileapp.urls')), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Python
복사
jichuuu/urls.py
from django.shortcuts import render # Create your views here. from django.urls import reverse_lazy from django.utils.decorators import method_decorator from django.views.generic import CreateView, UpdateView from profileapp.decorators import profile_ownership_required from profileapp.forms import ProfileCreationForm from profileapp.models import Profile class ProfileCreateView(CreateView): model = Profile context_object_name = 'target_profile' form_class = ProfileCreationForm success_url = reverse_lazy('accountapp:hello_world') template_name = 'profileapp/create.html' def form_valid(self, form): temp_profile = form.save(commit=False) temp_profile.user = self.request.user temp_profile.save() return super().form_valid(form) @method_decorator(profile_ownership_required, 'get') @method_decorator(profile_ownership_required, 'post') class ProfileUpdateView(UpdateView): model = Profile context_object_name = 'target_profile' form_class = ProfileCreationForm success_url = reverse_lazy('accountapp:hello_world') template_name = 'profileapp/update.html'
Python
복사
profileapp/views.py
from django.urls import path from profileapp.views import ProfileCreateView, ProfileUpdateView app_name = 'profileapp' urlpatterns = [ path('create/', ProfileCreateView.as_view(), name='create'), path('update/<int:pk>', ProfileUpdateView.as_view(), name='update'), ]
Python
복사
profile/urls.py
{% extends 'base.html' %} {% load bootstrap4 %} {% block content %} <div style="text-align: center; max-width: 500px; 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 %}
HTML
복사
profileapp/templates/profileapp/update.html
{% extends 'base.html' %} {% block content %} <div> <div style="text-align: center; max-width: 500px; margin: 4rem auto;"> <img src="{{ target_user.profile.image.url }}" alt="" style="height: 12rem; width: 12rem; border-radius: 20rem; margin-bottom: 2rem;"> {% if target_user.profile %} <h2 style="font-family: 'NanumSquareB'"> {{ target_user.profile.nickname }} <a href="{% url 'profileapp:update' pk=target_user.profile.pk %}"> edit </a> </h2> {% else %} <a href="{% url 'profileapp:create' %}"> <h2 style="font-family: 'NanumSquareB'"> Create Profile </h2> </a> {% endif %} <h5 style="margin-bottom:3rem;"> {{ target_user.profile.message }} </h5> {% if target_user == user %} <a href="{% url 'accountapp:update' pk=user.pk %}"> <p> Change Info </p> </a> <a href="{% url 'accountapp:delete' pk=user.pk %}"> <p> Quit </p> </a> {% endif %} </div> </div> {% endblock %}
HTML
복사
accountapp/templates/accountapp/detail.html
from django.contrib.auth.models import User from django.http import HttpResponseForbidden from profileapp.models import Profile 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
복사
profileapp/decorators.py