jc.jang

19강 프로필 수정 구현 본문

Django/Django - 인증편

19강 프로필 수정 구현

jangstory 2019. 9. 9. 22:25

주제

  • 프로필 수정 구현

노트

  • 프로필 수정 기능을 구현한다.
  • class based view는 강의에서 다뤘으므로 나는 function based view로 작성해봤다.

 

  • accounts/urls.py
from django.urls import path, reverse_lazy
from django.contrib.auth import views as auth_views

from . import views

urlpatterns = [
    # ...
    path('profile/edit/', views.profile_edit, name='profile_edit'),
    # ...
]
  • 프로필 수정 url 등록

 

  • accounts/forms.py
class ProfileForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ['bio', 'website_url']
  • 프로필 수정 시 입력받을 필드를 지정함

 

  • accounts/views.py
from django.contrib.auth.decorators import login_required
from django.shortcuts import redirect
from .forms import ProfileForm


@login_required
def profile_edit(request):
    if request.method == "POST":
        form = ProfileForm(request.POST)
        if form.is_valid():
            """
            현재 유저의 프로필을 가져오고
            받은 값으로 프로필을 갱신한다.
            """
            old_profile = request.user.profile
            old_profile.bio = form.cleaned_data['bio']
            old_profile.website_url = form.cleaned_data['website_url']
            old_profile.save()
            return redirect('profile')
    elif request.method == "GET":
        form = ProfileForm(instance=request.user.profile)
        return render(request, 'accounts/profile_form.html', {
            'form': form,
        })
  • 사용자의 프로필 데이터를 form에서 입력 받은 데이터로 갱신한다.

 

  • accounts/templates/accounts/profile_form.html
{% extends "accounts/layout.html" %}

{% block content %}
    <h2>프로필 수정</h2>
    
    <form action="" method="post">
        {% csrf_token %}
        <table>
            {{ form.as_table }}
        </table>
        <input type="submit">
    </form>
{% endblock %}
  • 프로필 수정을 위한 템플릿 파일을 작성했다.

질문

  • django form, modelform이 익숙하지 않아서 onetoone filed 수정할 때 조금 고생했다.
  • form 관련 강의가 있으니 빨리 듣고 싶다.

요약

  • 프로필 수정 기능을 구현한다.

날짜

  • 오후 10시, 20190909

 

Comments