일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
- MAC
- es6
- API
- AWS
- Git
- web
- form
- 파이썬
- HTML
- 장고
- 파이썬 알고리즘
- java
- django ORM
- Baekjoon
- c++
- django widget
- js
- 알고리즘 연습
- django rest framework
- javascript
- DRF
- 알고리즘 풀이
- 알고리즘
- CSS
- react
- 백준
- Algorithm
- Django
- 알고리즘 문제
- PYTHON
- Today
- Total
목록웹프로그래밍/DRF (16)
수학과의 좌충우돌 프로그래밍
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 로 해당 필드값에 대해 정의하..
Django-Authentication-Permissions [Django] Authentication 과 Permissions DRF 에서의 접근제한을 알아보도록 하겠습니다. 우선 기본적으로 접근제한을 제외한 기본적인 코드들에 대해서는 설명을 생략하겠습니다. 앞의 포스팅들을 참고해주세요. 현재 까지의 진행 상황은 다음과 같습니다.. ssungkang.tistory.com 저번 포스팅에서 django rest framework 에서의 Authentication과 Permissions 에 대해서 알아보았습니다. 이번 포스팅에서는 APIView에서 Permissions 을 사용해보도록 하겠습니다. Custom Permission 우선 사용할 두 개의 Custom Permission을 만들어보겠습니다. 여러 ..
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 최종..
Throttle 이란 특정 조건 하에 최대 호출 회수를 결정하는 클래스 입니다. 여러 이유로 지정 기간 내에 호출 횟수를 제한하는 것이죠. Rate rate 는 지정 기간 내의 최대 호출 횟수를 말합니다. 표기하는 방법은 {숫자}/{간격} 다음과 같이 표기합니다. 여기서 숫자는 지정 간격 내의 최대 요청 제한 횟수를 말하고, 간격은 횟수를 초기화하는 시간을 말합니다. 이 때 간격은 문자의 맨 앞글자만을 참조합니다. 따라서 d 나 day 는 똑같이 동작합니다. 사용할 수 있는 간격 키워드로는 다음과 같습니다. s : 초 m : 분 h : 시 d : 일 # ex "10/s" # 초당 10회 "100000/day" # 하루당 10만회 Rates 제한 메커니즘 django 에서 제공하는 Throttle 들은 모..
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 : 한 페이지에 몇 개의 레코드를 보여줄지 표시해줍..