Skip to content

Latest commit

 

History

History
73 lines (63 loc) · 5.46 KB

20210429.md

File metadata and controls

73 lines (63 loc) · 5.46 KB

Django

인상 깊은 조언

  • 참고할만한 사이트
    • medium: 주제를 구독해두면 메일로 알람이 온다.
    • 트위터: 외국 개발자들의 글을 볼 수 있다.
  • 변수명을 경로는 언더스코어, 데이터는 대쉬 등으로 구분하면 에러가 났을 때 어디에서 문제가 생겼는지 알기가 쉽다. 하지만 헷갈리면 적어도 하나로 통일할 것. 들쭉날쭉 쓰는 것은 최악이다.
  • 장고에서 만들어준 get_object_or_404create, update 등의 메서드들은 편의를 위해 잘 되어있기 때문에 복잡하게 쿼리를 커스텀해야 하는 상황이 아니라면 그냥 objects 매니저를 쓰는 것이 안정성도 보장되는 더 좋은 선택이다.
  • 유닉스타임을 default로 줘야 할 때 time을 import한 후 default=time.time()으로.
    • 특정 데이터베이스의 타임으로 값을 주는 경우(SQL의 DateTimeField 등), 파이썬이나 자바스크립트로 변환하기 위해 번거로운 노력을 들여야 하니까 유닉스타임으로 주는 게 좋다.
    • 생성과 등록시간의 구분이 정말 중요한 핀테크 쪽은 DB타임도 중요하다.
  • 유닉스타임 vs. DB 시간 등 너무 디테일에 시간을 들이기보다는 선택과 집중으로 다른 기능이나 전체적인 코드의 품질을 높이는 것도 개발자의 역량이다.

Django로 CRUD 서비스 만들기 (continued)

지난 시간 복습

  • 모델을 만들어 두고, 템플릿에서 유저가 입력하는 값을 form으로 받아, objects 매니저에 사용할 수 있는 메서드 중 하나인 create를 통해 DB에까지 반영해보았다.
  • render와 redirect의 차이, 입력 후 다른 페이지로 redirect해주는 방법을 배웠다.
  • 입력하지 않는 경우에 대한 에러 처리를 해보았다.

유저의 수정요청으로 Update 한 정보를 반영하기

  • update 메서드는 QuerySet 타입에만 적용된다.
  • get이나 get_object_or_404가 가져오는 건 instance이기 때문에 꼭 filter로 가져와야 한다.

학생조회 페이지 수정 기능 만들기

  • 학생 정보 수정을 위한 링크와 경로를 만든다.
    • path는 path('edit/<int:student_pk>', views.edit, name='edit')으로 ur/ls.py에 추가해준다.
    • 기존 템플릿에 수정을 위한 a태그를 만들고, href="{% url 'edit' student.pk %}"
  • 학생 정보 수정 페이지인 edit.html을 만들어준다.
    • method='POST' action="{% url 'edit' student.pk %}" 어트리뷰트를 갖는 form태그와 csrf 토큰을 보내는 템플릿 코드 {% csrf_token %}를 작성해준다.
    • input들을 받을 태그를 작성해주되, 수정이 용이하도록 이미 있는 정보를 넣어준다.
      • input 태그에는 value 어트리뷰트에, textarea 태그에는 텍스트 노드 안에 {{ student.name }}, {{ student.introduction }}을 각각 넣어주기
    • 각 태그에 데이터 이름을 키로 하여 취득할 수 있도록 name 어트리뷰트를 꼭 넣어준다.
<form method="POST" action="{% url 'edit' student.pk %}">
{% csrf_token %}
  <input type="text" name="name" value="{{ student.name }}"/>
  <textarea name="introduction">{{ student.introduction }}</textarea>
  <button>수정하기</button>
</form>
  • edit 함수를 통해 form에서 받은 값들로 pk로 취득한 student 객체를 업데이트해준다.
    • edit 함수에서 request.POST에서 key로 받은 이름을 변수에 할당, update 해준다.
    • student_pk로 받은 pk값으로 filter한 student 인스턴스의 QuerySet을 student라는 변수에 할당한다.
    • student.update()의 소괄호 안에서 인스턴스 변수들을 새로운 값으로 할당해준다.
def edit(request, student_pk):
    target_student = Student.objects.filter(pk=student_pk)
    class_pk = target_student.first().class_room.pk
    context = { student: target_student }

    if request.method == 'POST':
	new_name = request.POST['name']
	new_introduction = request.POST['introduction']
	target_student.update(
	    name = new_name,
	    introduction = new_introduction
	)
	return redirect('class_detail', class_pk)

    return render(request, 'edit.html', context)
  • create 할때와 마찬가지로 내용이 없으면 오류메시지를 띄울 수도 있다.
  • POST 요청의 if 문에서는 redirect를, 일반 GET 요청에 대해서는 edit.html rendering을 리턴해준다.

테크톡 (5/4)

  • 장고 실습만 하니 수강생들이 심심하기도 하고, 보다 더 많은 것을 가르쳐주시려는 선생님의 깊은 뜻에 따라(?) 테크톡을 하기로 했다. 뭔가 개발자스러운 수업시간이 되어가는 것 같아 재밌다.
  • 우리 조는 파이썬에 대해서 조사하고 발표하기로. 파이썬이라는 프로그래밍 언어가 메모리를 어떻게 관리하는지, 다른 언어와 다른 점은 무엇이며 왜 그런 특징을 가지는지, 그리고 우리가 파이썬 시간에 배우지 못했던 generator라는 개념 이렇게 크게 세 꼭지로 준비하기로 했는데 아직 엄두가 안난다.
  • 그래도 파이썬을 언어만 쓰는 게 아니라 맥락을 공부할 수 있게 된 좋은 기회 같다. 잘 준비해서 해봐야겠다.

느낀 점

  • 기본적인 지식을 넘어서 이젠 에러처리 노하우나 특정 요소 구현에 에너지 배분을 어떻게 할지에 대해서도 배워나가는 것이 재미있었고, 이런 것을 조절하는 것도 역량이라는 것이 인상깊었다.