목록Django (84)

수학과의 좌충우돌 프로그래밍

[Django] 관계를 표현하는 모델 필드, ForeignKey,OneToOneField,ManyToManyField

model 을 설계하는데 있어서 관계는 뺴놓을 수 없는 중요한 개념입니다. 각 모델 간에 여러 관계를 정의함으로서 많은 걸을 구현 할 수 있게 됩니다. 관계는 총 3가지가 있으며 이번에는 바로 그 관계에 대해서 알아보도록 하겠습니다. ForeignKey ForeignKey 는 1:N 관계를 의미합니다. 예를 들어 게시글과 댓글을 생각할 수 있습니다. 하나의 글에는 그 글에 해당하는 댓글이 여러 개 존재하게 되므로 ForeignKey 를 만족합니다. django 에서의 사용 예시 class Post(models.Model): # 생략 class Comment(models.Model): post = models.ForeignKey(Post, on_delete=models.CASCADE) 1:N 중에서 N 인..

웹프로그래밍/Django 2019. 7. 20. 16:16
[Django] 데이터베이스 조회, queryset

이번 시간에는 데이터베이스에 저장되어 있는 데이터를 불러오는 방법에 대해서 알아보도록 하겠습니다. queryset 이란 이를 위해 빼놓을 수 없는 개념이 바로 queryset 입니다. query 란 데이터베이스에 정보를 요청해주는 것을 의미하며 파이썬으로 작성한 코드가 sql 로 매핑되어 queryset 이라는 자료 형태로 값이 넘어오게 됩니다. 이는 순회가능한 데이터로서 이를 이용하여 1개 이상의 데이터를 불러와 사용할 수 있습니다. queryset 의 특이한 점은 Lazy 한 특성입니다. 미리 db 에 접근해서 값을 불러오는 것이 아니라 출력 등과 같이 필요한 순간에 sql로 매핑되고 이를 통해 db에 접근해 값을 가져오게 됩니다. queryset 생성하기 queryset 에 대해서 알아보기 위해 m..

웹프로그래밍/Django 2019. 7. 18. 02:49
[Django] model 더 알아보기, ORM, model의 option, migrate

model 에 대한 두 번째 포스팅입니다. 저번 포스팅은 django 를 처음 공부하면서 정말 기본적인 내용에 썼다면, 이번에는 공부하면서 좀 더 필요하다고 생각이 된 부분들에 대해서 새롭게 추가해보았습니다. ORM 이란? ORM 이란 object-relational mapping 의 줄임말로서 영어 그대로 해석하면 객체의 관계를 연결해주는 것을 뜻합니다. 데이터베이스는 SQL 로 관리를 하게 되는데 DJango 같은 경우, 파이썬 코드와 SQL 를 매핑 시켜줌으로서 파이썬 코드로도 쉽게 데이터베이스를 다룰 수 있게 됩니다. 좀 더 정확히 말하자면 데이터베이스 테이블 과 models.py 의 파이썬 클래스 를 1대1로 매핑하게 됩니다. 장고의 장점 중 하나로도 ORM 기능이 지원되는 점이 뽑힐 만큼 매력..

웹프로그래밍/Django 2019. 7. 17. 01:16
[Django] visual studio code 를 이용한 debug

vs code 로 디버깅 하는 과정을 알아보겠습니다. 디버깅 하는 방법이야 여러가지 방법이 있겠지만 저는 이전까지 확인하고 싶은 변수를 print 함으로서 확인하는 과정을 거쳤습니다. 하지만 한계점을 많이 드러냈고 이에 따라 제대로 된 디버깅을 하고자 하였습니다. 이번 시간에는 vscode 를 이용하여 더 정확하고 활용성 높은 방법을 알아보도록 하겠습니다. 테스트를 해보기 위해서 간단한 장고 프로젝트를 만들겠습니다. 현재 프로젝트와 core 라는 app 을 만들었고 상황은 다음과 같습니다. # config/urls.py from django.contrib import admin from django.urls import path from core import views urlpatterns = [ pat..

웹프로그래밍/Django 2019. 7. 14. 02:55
[Django] Channels, 비동기적 채팅 구현하기 - WebSocket (3)

소비자 개선 앞선 포스팅 WebSocket (2) 에서 작성했던 소비자는 동기적으로 작성되어 있습니다. 이렇게 함으로서 django 의 I/O 함수를 쉽게 호출할 수 있어 편리했습니다. 소비자를 비동기식으로 작성하게 되면 요청을 처리할 때, 추가적인 쓰레드를 생성하지 않습니다. 즉 성능 개션을 불러올 수 있는 것이죠. 실시간 채팅같은 경우에는 성능이 굉장히 중요한 요소이기 때문에 이 과정이 필요합니다. 앞에서도 한 번 언급했던 sync_to_async 를 통해서 django 의 동기적인 코드를 비동기적으로 수행하도록 할 수 있지만 지금 사용할 async-native 라이브러리보다 성능이 떨어집니다. # chat/consumers.py from channels.generic.websocket import ..

웹프로그래밍/Django 2019. 7. 11. 14:23
[Django] Channels, 비동기적 채팅 구현하기 - WebSocket (2)

저번 시간 WebSocket (1)에서는 이론적인 개념들과, 약간의 실습을 진행해보았습니다. 하지만 아직 채팅은 보내지지 않고 에러가 발생하였습니다. 지금부터 그 문제를 해결해보도록 하겠습니다. 소비자 만들기 django의 기본 원리를 생각해보면 HTTP 요청을 받아들이고 매핑된 URL 로 이동, 이에 따라 views 에 함수를 실행합니다. 이와 유사하게 Channels역시 WebSocket 연결을 받아들이면, root routing configuration에서 소비자를 찾은 후에, 이벤트를 처리하기 위한 함수들을 호출합니다. # chat/consumers.py from channels.generic.websocket import WebsocketConsumer import json class ChatC..

웹프로그래밍/Django 2019. 7. 11. 14:18
[Django] Channels, 비동기적 채팅 구현하기 - WebSocket (1)

비동기적, 즉 실시간 채팅을 구현하기 위해서 WebSocket 을 사용하고자 하였고, django에서 이를 가능하게 해주는 Channels 라이브러리를 알아보았습니다. 전체적인 내용은 공식 문서 를 참고하였습니다. WebSocket 이란? WebSocket은 프로토콜로서, 실시간으로 데이터를 양방향 통신 할 수 있게 해주는 기술 입니다. Socket 이란 쉽게 생각해서 통신을 위한 통로라고 생각하면 됩니다. 이런 통로를 Web 에도 도입하게 되었는데 기존의 Web이 정보를 어떻게 주고 받는지 생각해보면 socket이 필요한 이유를 알 수 있습니다. Web 환경은 필요한 정보를 HTTP 기반으로 Request/Response로 연결하여 데이터를 주고 받아 네트워크의 연결을 유지하지 않는 특징을 가지고 있습..

웹프로그래밍/Django 2019. 7. 10. 15:08