상세 컨텐츠

본문 제목

장고(파이썬)프로젝트_6

파이썬·장고·루비·알고리즘

by 김일국 2019. 5. 30. 14:32

본문

이번 포스트로 장고(파이썬)프로젝트를 마무리 하려고 합니다.

오늘은 지난 포스트에 이이서 CRUD 중 Read 와 Update, Delete 를 구현해 보았습니다.

아래는 결과와 작업 순서를 나타냅니다.( http://kimilguk.pythonanywhere.com/award/ )


* URLs 라우팅 정의

- /home/kimilguk/KIK_profile/kik_profile/urls.py

- 내용:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('list/', views.career_list, name='career_list'),
    path('award/', views.award_list, name='award_list'),
    path('award/create/', views.award_create, name='award_create'), #저장폼.
    path('award/read/<int:pk>/', views.award_read, name='award_read'), #내용보기:파일추가
    path('award/update/<int:pk>/', views.award_update, name='award_update'), #수정폼:저장폼과 같은 파일 사용.
    path('award/delete/<int:pk>/', views.award_delete, name='award_delete'), #삭제:파일없이 함수만으로 처리.
]


* 리스트파일에 내용보기 링크 추가

- /home/kimilguk/KIK_profile/kik_profile/templates/kik_profile/award.html

- 내용:

<div class="card">
    <div class="card-body">
    {% if content_list %}
        <ul>
        {% for c in content_list %}
            <li><a href="{% url 'award_read' pk=c.id %}"><strong>{{c.title}}</strong></a><br>
             {{c.award_date}}<br>
            </li>
        {% endfor %}
        </ul>
    {% else %}
        <p>No post are available.</p>
    {% endif %}
    </div>
</div>
<a href="/">go to main</a>
 || <a href="/award/create/">go to Award Create</a>


* CRUD 로직 처리

- /home/kimilguk/KIK_profile/kik_profile/views.py

- 내용: def Create, Read, Update, Delete 함수생성

...

def award_create(request):
    if request.method=='POST':
        award_form = AwardForm(request.POST)
        if award_form.is_valid():
            award_form.save()
        return redirect('/award/')
    else:
        award_form = AwardForm()
    return render(request, 'kik_profile/award_form.html', {'award_form': award_form})

def award_read(request, pk):
    award_instance = get_object_or_404(Award, id=pk)
    printmsg = "";
    printmsg = model_to_dict(award_instance) #디버그용 html파일에 출력
    messages.info(request, printmsg) #디버그용 html파일에 출력
    return render(request, 'kik_profile/award_read.html', {'award_instance': award_instance})

def award_update(request, pk):
    award_instance = get_object_or_404(Award, id=pk)
    if request.method=='POST':
        award_form = AwardForm(request.POST, instance=award_instance)
        if award_form.is_valid():
            award_form.save()
        return redirect('/award/')
    else:
        award_form = AwardForm(instance=award_instance)
    return render(request, 'kik_profile/award_form.html', {'award_form': award_form})

def award_delete(request, pk):
    award_instance = get_object_or_404(Award, id=pk)
    award_instance.delete()
    return redirect('/award/')


* 읽기 html파일 추가(여기서 Update폼, Delete함수 호출)

- /home/kimilguk/KIK_profile/kik_profile/templates/kik_profile/award_read.html

- 내용:

...

<div class="card">
    <div class="card-body">
       <p class="card-text">
           id: {{ award_instance.id }} -- title: {{ award_instance.title }} date: {{ award_instance.award_date }}
       </p>
    </div>
</div>
<a href="/award/">go to Award List</a>
 || <a href="{% url 'award_update' pk=award_instance.id %}">go to Award Edit</a>
 || <a href="{% url 'award_delete' pk=award_instance.id %}">go to Award Del</a>
{% if messages %}
<ul class="messages">
    {% for message in messages %}
    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}

...

수정후 GitLab에 동기화 시킨 후 추가한 파일과 수정한 내역을 확인 할 수 있습니다.(아래)


관련글 더보기

댓글 영역