Hello! Poko 개발 목적 및 v1.0.0: 초기 구현 과정

김의석 ·2024년 2월 16일

Hello! Poko Ver.1

목록 보기
1/20
post-thumbnail

POKO(사귐의 교회 청소년부 출석부) 개발과정 기술.

소스코드 로직 파악 진행 중

  • 출석부 생성을 버튼 누른 후 어느 url과 views에 연결되어 기능하는지 확인 완료

    • 생성버튼을 누르면 attendace_produce에서 date(오늘날짜)값을views.py date함수에 전달
    • Date 함수는 attendace_check에 값을 전달하고 member 모델의 member 리스트와 출석 체크창을 출력
    • 주의 사항
      • Project urls.py와 app urls.py에서 라우팅 설정 /(백슬래쉬) 위치 확인할 것
      • Html <form method="POST" action="date/">  /(백슬래쉬)의 위치 확인하고 app urls.py 에서 설정한 경로와 동일해야함
  • Grade model 생성 후 member model에 FK 부여

    • member 김현우에 mid_3_m 부여
      • Grade 모델의 descriptions 필드에 선생님 정보 기입 할것
  • 출석을 체크 내용을 chck 함수가 어떻게 처리하는지 확인

    • chck 함수에 의해서 attendance 모델에 출석이 기록됨
  • 이슈 출석 체크 후 웹이 chk/ 경로가 하나 더 붙어
    attendace_check.html 출력되고 이후에 출석을 하려면 라우팅된 경로와 맞지 않게 되어 오류 출력

  • 이유 : form에서 절대 경로와 상대경로 지정의 차이.
    form의 action 속성이 "chk/"와 같이 상대 경로로 설정되어 있을 때, 해당 폼을 제출하면 현재 페이지의 경로에 상대적으로 chk/를 추가하여 전체 URL을 생성합니다. 이로 인해 기대치와 다른 URL이 생성되어 라우팅이 제대로 이루어지지 않을 수 있습니다.
    form의 action 속성에 절대 경로를 설정하면 해당 경로는 고정됩니다. 따라서 폼이 제출되었을 때 현재 페이지의 URL에 영향을 받지 않고 항상 설정된 절대 경로로 데이터가 전송됩니다.
    예를 들어, 현재 페이지의 URL이 http://127.0.0.1:8000/checking/date/이고 폼의 action을 {% url 'chk' %}로 설정했다면, 폼을 제출하면 항상 http://127.0.0.1:8000/checking/date/chk/로 데이터가 전송됩니다. 이렇게 하면 현재 페이지의 URL에 상대적인 경로가 고려되지 않으며, 항상 절대 경로로 제출이 이루어집니다.

  • 해결 : django에서 동적 경로 변경

# urls.py
from django.urls import path
from .views import chk

urlpatterns = [
    path('chk/', chk, name='chk'),
]
  
<!-- 템플릿에서 절대 경로 지정 -->
<form method="POST" action="{% url 'chk' %}">
    <!-- 폼 요소들 -->
</form>

필요 기능 구현

완료 버튼과 처음 화면으로 돌아가기 생성 하기 완료

poko 이미지 index.html 삽입하기

  • 모델 작성
    • Grade모델 이슈
      • 반드시 admin에 모델 등록 시 이름을 달리하여 등록할 것 예시 GradeAdmin
# model 작성
 class GetImage(models.Model):
    name = models.CharField(max_length=50)
    image = models.ImageField(blank=True, upload_to="checking/getimage/%Y/%m/%d")
    description = models.TextField()

    def __str__(self):
        return self.name
  
# admin 등록
  @admin.register(GetImage)
class GetImageAdmin(admin.ModelAdmin):
    list_display = ["id", "name", "description"]

    def photo_tag(self, GetImage):
        if GetImage.image:  # GetImage model 내에 첨부된 사진이 있다면
            return mark_safe(f'<img src="{GetImage.image.url}" style="width: 72px;" />')
        return None
  # tip GetImage.image.url : shell에서 GetImage.object.get(pk=1).image.url로 url 접근할 수 있다.(첨부된 파일이 있는 경우에만 url 접근 가능)

# view에서 poko_image변수에 query 작성후 render context로 전달
  def index(request):
    poko_image = GetImage.objects.get(pk=2).image.url
    return render(request, "checking/index.html", {"poko_image": poko_image})
  <!-- style 설정 후 이미지 삽입 -->
    <style>
        .resized-image {
            width: 400px;
            height: 300px;
            margin: 0 auto; /* 수평 가운데 정렬을 위해 margin을 활용 */
            display: block; /* 블록 요소로 설정하여 margin 속성이 적용되도록 함 */
        }
    </style>
  
  
  <img src="{{ poko_image }}" alt="POKO" width="" height="300" class="resized-image"> <!-- POKO 이미지 삽입-->

Grade model 재생성 및 검색창에 선생님으로 필터링

  • Grade model 작성
    외래키 설정

    3월 13일 초기 구현 진행 완료

  • 3월 14일 부터 배포를 위한 작업 시작

    (2월 13일~3월 13일 완료)

profile
널리 이롭게

0개의 댓글