일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- django widget
- 파이썬 알고리즘
- 알고리즘 연습
- c++
- DRF
- 알고리즘
- 알고리즘 풀이
- PYTHON
- django rest framework
- Django
- Baekjoon
- 알고리즘 문제
- 파이썬
- AWS
- MAC
- Algorithm
- API
- web
- 장고
- form
- HTML
- java
- CSS
- 백준
- react
- django ORM
- es6
- javascript
- Git
- js
- Today
- Total
목록DRF (13)
수학과의 좌충우돌 프로그래밍
django restframework에서는 디폴트로 브라우저에서 서버와 통신할 수 있습니다. 하지만 이 때 로그인이 필요한 경우에 이를 처리할 수 없습니다. 클라이언트 툴인 postman이나 httpie 같은 경우에는 request header를 설정하여 token을 넣어주는 등 인증을 할 수 있지만 django rest framework browser는 이를 해줄 수 가 없죠. 그래서 DRF Browsable API에 로그인 기능을 추가할 수 있습니다. restframework는 install 했다는 전제하에 urls에 다음과 같이 추가해주시면 됩니다. # config/urls.py urlpatterns += [ path('api-auth/', include('rest_framework.urls')), ]
django rest framework 를 사용하여 rest API 서버를 만들다보면 serializer 를 사용하지 않을 수 가 없습니다. 기본적으로 model 에 등록된 필드 값들은 Meta 클래스에 추가줌으로서 다뤄줄 수 있지만 커스텀 필드를 정의하는데 있어서는 새로운 방법이 필요합니다. 이번 포스팅에서는 간단하게 Custom Field 만드는 법에 대해서 알아보도록 하겠습니다. SerializerMethodField SerializerMethodField 를 사용하여 쉽게 커스텀 할 수 있습니다. SerializerMethodField 는 read-only field 로 값을 저장하거나 수정할 때는 사용되지 않고 조회할 때만 사용합니다. 인자로는 method_name 로 해당 필드값에 대해 정의하..
CORS 란? 제목에서 알 수 있듯이 CORS 는 Cross-Origin Resource Sharing 의 줄임말입니다. Cross-Origin Resource Sharing 는 한국어로 교차 출처 리소스 공유라고 하며 웹 페이지 상의 제한된 리소스를 최초 자원이 서비스된 도메인 밖의 다른 도메인으로부터 요청할 수 있게 허용하는 구조입니다. django 같은 경우, 기본적으로 8000 포트를 사용하고 있기 때문에 다른 포트를 사용하는 프론트 서버와 통신을 막고 있습니다. 따라서 CORS 를 설정하지 않은 상태로, 프론트 서버에서 통신을 요청하면 다음과 같은 에러를 확인할 수 있습니다. Access to fetch at 'http://localhost:8000/auth/login' from origin '..
DRF 에서 지원하는 인증은 다음과 같습니다. rest_framework.authentication.SessionAuthentication rest_framework.authentication.BasicAuthentication rest_framework.authentication.TokenAuthentication 초기에 username/password 으로 Token 발급 이 Token을 매 API 요청에 담아서 보내어 인증을 처리 SessionAuthentication,BasicAuthentication 은 django default 이고 TokenAuthentication 은 따로 설정을 해줘야합니다. 그래서 기본적인 SessionAuthentication,BasicAuthentication 을 ..
rest_framework 의 각종 default 설정에 대해서 알아보겠습니다. https://github.com/encode/django-rest-framework/blob/master/rest_framework/settings.py encode/django-rest-framework Web APIs for Django. 🎸. Contribute to encode/django-rest-framework development by creating an account on GitHub. github.com 장고 공식문서 rest_framework/settings.py 의 DEFAULTS dict 를 통해 확인할 수 있습니다. 현재 블로그는 2020년 1월 8일 3.9 버전에 대한 내용입니다. HTTP 최종..
DRF 에서의 접근제한을 알아보도록 하겠습니다. 우선 기본적으로 접근제한을 제외한 기본적인 코드들에 대해서는 설명을 생략하겠습니다. 앞의 포스팅들을 참고해주세요. 현재 까지의 진행 상황은 다음과 같습니다. Post 모델에 author 를 추가하여 글 작성자를 연결하였습니다. # models.py from django.db import models from django.conf import settings class Post(models.Model): author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) title = models.CharField(max_length=100) created_at = models.Date..
이번 포스팅에서는 Serializer 에 대해서 자세히 알아보도록 하겠습니다. Serializer 우선 github에서의 Serializer 코드를 살펴보겠습니다. Serializer 는 BaseSerializer 를 상속 받고 BaseSerializer 의 생성자는 아래와 같습니다. # rest_framework/serializers.py class BaseSerializer(Field): def __init__(self, instance=None, data=empty, **kwargs): # 생략 class Serializer(BaseSeializer): # 생략 그렇기 때문에 우리는 이를 사용할 때 post 라는 instance가 먼저 나온다면 뒤에 data 라는 keyword 를 써줄 필요가 없지..
실제 서비스의 경우에는 레코드의 개수가 많을 것이고 이 경우 하나의 API 요청으로 모든 레코드를 받는 것은 오랜 시간이 걸리게 됩니다. 따라서 이런 경우 페이지를 나눠서 요청을 해야합니다. 다행히도 DRF 에서는 이러한 pagination 기능을 제공하고 있습니다. PageNumberPagination 과 LimitOffsetPagination pagination 을 하는데는 크게 두 가지 방법이 있습니다. 두 방법 모두 url 의 get parameter 를 이용하여 이를 지원해줍니다. 각각에 대해 알아보도록 하겠습니다. PageNumberPagination page : 몇 번째 페이지인지 표시해줍니다. 페이지는 1부터 시작합니다. page_size : 한 페이지에 몇 개의 레코드를 보여줄지 표시해줍..
목록을 조회하는 ListAPIVIew 에서 필터링하는 방법에 대해서 알아보도록 하겠습니다. 이는 CBV 의 일종이기 때문에 CBV와 익숙하시다면 쉽게 하실 수 있을 겁니다. 여러 인자 획득 filtering 을 하는데 필요한 인자들을 request 를 통해서 획득할 수 있습니다. self.request.user 현재 로그인 중인 유저에 접근할 수 있습니다. 로그인이 안 되어 있을 시에는 AnnoymousUser 인스턴스를 획득합니다. self.request.GET 요청한 get 인자들을 획득합니다. self.request.query_params self.request.GET 와 같은 값을 얻습니다. 보다 더 가독성이 높기 때문에 DRF 에서 지원하고 있습니다. self.kwargs URL Capture ..
restframework.response.Response 에서는 2가지 타입의 응답을 할 수 있습니다. json 다른 일반적인 경우 json 타입으로 응답하게 됩니다. { "post":"http://127.0.0.1:8000/post/" } api DRF은 브라우저를 통해 접근이 가능하며 이 경우 api 타입으로 응답하게 됩니다. 이 api 타입이 html로서 우리가 브라우저에서 보게 되는 아래의 이미지입니다. 출력 포맷을 결정하는 방법은 3가지가 있습니다. 각 방식에 대해 json 타입의 요청과 api 타입의 요청하는 방법은 다음과 같습니다. Accept 헤더 localhost:8000/ Accept:application/json localhost:8000/ Accept:text/html GET 인자 ..