Post

Django 기반 웹 개발(5)

프로필 조회 및 수정, 작성한 레시피 조회 기능 구현

작업 브랜치: https://github.com/yehoon17/recipe_management_system/tree/profile

프로필 조회 및 작성한 레시피 조회

alt text

views.py

1
2
3
4
5
@login_required
def profile(request):
    recipes = Recipe.objects.filter(user=request.user)
    context = {'recipes': recipes}
    return render(request, 'profile/profile.html', context)

프로필 수정

alt text

forms.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class ProfileEditForm(UserChangeForm):
    email = forms.EmailField()
    first_name = forms.CharField(max_length=30)
    last_name = forms.CharField(max_length=30)

    class Meta:
        model = User
        fields = ['email', 'first_name', 'last_name']

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        del self.fields['password']

    def save(self, commit=True):
        user = super().save(commit=False)
        user.email = self.cleaned_data['email']
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        if commit:
            user.save()
        return user
    
class ProfileForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ['image']

views.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@login_required
def profile_edit(request):
    if request.method == 'POST':
        # Handle profile image form
        profile_image_form = ProfileForm(request.POST, request.FILES, instance=request.user.profile)
        if profile_image_form.is_valid():
            profile_image_form.save()
        
        # Handle user information form
        user_form = ProfileEditForm(request.POST, instance=request.user)
        if user_form.is_valid():
            user_form.save()

        return redirect('profile')  # Redirect to the profile page after editing
    else:
        profile_image_form = ProfileForm(instance=request.user.profile)
        user_form = ProfileEditForm(instance=request.user)
    return render(request, 'profile/profile_edit.html', {'profile_image_form': profile_image_form, 'user_form': user_form})

Thoughts

  • 작성한 레시피 내에서 검색 기능
  • 작성한 레시피의 태그
  • 작성한 레시피 통계

Next: Django 기반 웹 개발(6)

This post is licensed under CC BY 4.0 by the author.