반응형

Today I Learned/django 27

DRF APIView -> generic&mixin -> ViewSets 과정 차근 차근 알아보자

DRF에서 기능 구현은 아주아주 다양한 방법으로 가능한데, 제일 심플한 ViewSet으로 구현하게 될 경우 코드양은 매우 줄여지고 간편하지만, 유연하게 커스텀해서 사용하기 어려울 수 있고 APIView 단계로 내려가면 직접 구현해주어야하는게 많아 코드양은 많아지지만 요구사항이 복잡할 때 유연하게 커스텀해서 사용할 수 있다. 그런데 ViewSet이 간단하다고 APIView 구현 로직을 모르고 계속 ViewSet만 사용한다면 나중에 직접 함수로 다양한 요구사항을 처리하기 어려울 수도 있다. 다른 블로그 글들을 보면서 과정은 계속 익혔는데, 아무래도 한번 직접 정리를 해야 완벽하게 정리가 될 것 같아서 직접 정리하기로!! 1. APIView 로 List & Detail 구현 장고 DRF의 기본 CBV(Clas..

requests.post() 로 tmap API 에 위치정보 POST해서 결과 받아오기

참고 링크 https://tmap-public-skopenapi.readme.io/reference/%EB%8C%80%EC%A4%91%EA%B5%90%ED%86%B5-%EC%9A%94%EC%95%BD%EC%A0%95%EB%B3%B4-api 대중교통 요약정보 API / title [s] /.App .rm-Guides header h1, .App .rm-ReferenceMain header h1, .App .rm-Changelog header h1 {color:#3b454e; font-size:32px;}.headline-container21aRBSn8Bqg6 .excerptT2m-MzSJGRK7 {font-size:18px;}h2.heading.heading .heading-text {font-size:2..

장고 ViewSet 으로 list, retrieve, update, create, delete 직접 구현하기

1. ModelViewSet 사용하기 장고에서 DRF를 사용하면 무려 코드 두줄로 기본 CRUD를 완성할 수 있다. ModelViewSet 을 상속받아서, 쿼리셋과 Serializer만 설정해주면 된다. 그리고 라우터 한줄을 추가해주면 알아서 관련된 CRUD 엔드포인트를 만들어준다. [Post 예시] # views.py class PostViewSet(ModelViewSet): queryset = Post.objects.all() serializer_class = PostSerializer # urls.py router = DefaultRouter() router.register('post', views.PostViewSet, basename='post') urlpatterns= [ *router.url..

장고 django ManyToMany (N:M 다대다 관계)

N:M 관계 예시 인스타그램 같은 서비스를 생각해보면, #맛집 이라는 태그는 여러개의 포스트에도 달릴 수 있고, 하나의 포스트에는 #맛집, #아이스크림 이렇게 여러개의 태그가 달릴 수 있습니다. 이럴 때 ManyToMany로 정의해줄 수 있습니다. 정의 방법 N쪽에 정의를 해줘야하는 ForeignKey와 달리 어느쪽에 정의해주어도 상관없습니다. (대신 한쪽에 해줬으면 한쪽에는 X) 하지만 활용하는 쪽에 정의해주면 좀더 자연스럽습니다. 태그와 포스팅 관계에서는 태그를 활용하는 포스트에 정의를 해주는 것이 좋습니다. class Post(models.Model) ... Tag = models.ManyToMany('Tag', blank=True) class Tag(models.Model) name = model..

장고 django ForeignKey (1:N 관계)

1:N 관계 예시 한명의 유저는 여러개의 포스트를 작성할 수 있다. -> 1:N 하나의 포스트는 여러개의 댓글을 가질 수 있다. -> 1:N 이렇게 하나의 객체가 여러개의 객체를 가질 수 있을때 1:N 관계라고 하고 ForeignKey로 관계를 정의 할 수 있다. 정의 방법 N에 해당하는 객체에 ForeignKey 로 지정해준다. Post, Comment 예시로 들면 아래처럼 작성할 수 있다. class Post(models.Model): ... class Comment(models.Model): post = models.ForeignKey(Post, on_delete= models.CASCADE) Queryset 작성 방법 1. N 객체에서 관계된 객체의 값 조회하기 comment = Comment.o..

장고 (djagno) Rest framework tutorial #2 데이터 보내기(POST)

2023.09.05 - 장고 (djagno) Rest framework tutorial #1 데이터 가져오기 (GET) 장고 (djagno) Rest framework tutorial #1 데이터 가져오기 (GET) 데이터역량 키우는 하루하루의 기록 hanawithdata.tistory.com 먼저 이전글을 참고하면 기본적인 세팅과 GET 뷰를 작성할 수 있습니다. 오늘은 POST로 JSON data를 전송할건데, 아주아주 간단합니다. api > views.py에 함수 추가 - 이전에 만들어준 ItemSerializer함수에 request.data (입력 데이터)를 넘겨줍니다. - 유효한 데이터라면 저장해주고 응답을 줍니다. @api_view(['POST']) def addItem(request): se..

장고(django) 회원가입 (UserCreationForm)

2023.08.11 - 장고 (django) - LoginView, LogoutView, LoginRequireMixin 설정하기 장고 (django) - LoginView, LogoutView, LoginRequireMixin 설정하기 데이터역량 키우는 하루하루의 기록 hanawithdata.tistory.com 로그인 관련해서는 위에 글 참고! 1. 기본적인 회원 가입 화면 생성 1) views.py def register(request): if request.method=='POST': form = UserCreationForm(request.POST) if form.is_valid(): form.save() form = UserCreationForm() context = {'form':form} ..

장고 asgi(비동기) 채팅기능 구현하기

ASGI (Asynchronous Server Gateway Interface) & WSGI (Web Server Gateway Interface) 웹 애플리케이션과 웹 서버간에 표준화된 통신 인터페이스를 제공하는 통신 프로토콜인데, ASGI는 비동기적인 프로토콜이며 WSGI는 동기적인 프로토콜입니다. 동기적: 작업이 끝날때까지 요청을 처리하지 않고 대기해서 I/O 작업이 있는 애플리케이션에서 성능이 저하될 수 있음 -> 실시간 기능을 지원하기 어려움 비동기적: 작업이 끝날때까지 요청을 블로킹하지 않고 다른 작업을 처리하여 더 빠른 응답 시간과 더 높은 동시성 제공 -> 실시간 기능을 구현할 수 있음 , 따라서 채팅, 실시간 업데이트 , 실시간 게임과 같은 애플리케이션 개발에 좋음 장고에서 ASGI 사용..

장고 (djagno) Rest framework tutorial #1 데이터 가져오기 (GET)

RESTful API는 언제 사용하나? 웹 어플리케이션 간에 서버에서 데이터를 주고 받을 때 , 외부 서비스와 통합할 때( 지도, 결제처리, 메시징처리 등) , 클라이언트와 백엔드 서버간에 효율적인 통신을 구축할 때 , 다른 서버와의 통신이 필요할 때 등 RESTful API를 사용하면 데이터의 공유와 상호 작용을 효율적으로 관리하고, 서로 다른 시스템 간의 통신을 단순화할 수 있습니다. DRF (djangorestframework) 장고기반 웹 어플리케이션에서 RESTful API를 만드는 것을 도와주는 패키지 아주 간단한 API 만들어보기 1. 장고 프로젝트 생성 django-admin startproject myproject cd myproject 2. DRF 설치 pip install django..

장고 (django) 캐시 사용하기 (redis)

2023.08.31 - 장고 (django) 캐시 사용하기 (memcached) 장고 (django) 캐시 사용하기 (memcached) 데이터역량 키우는 하루하루의 기록 hanawithdata.tistory.com memcached 사용하는 방법은 이전 글 참고해주세요! 설치 및 설정 단계 1. 패키지 설치 pip install redis==4.3.4 2. settings.py 에 캐시 설정 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.redis.RedisCache', 'LOCATION': 'redis://127.0.0.1:6379', } } 3. Redis 도커 컨테이너 실행 docker run -it --rm --name redis..

반응형