분류 전체보기
[Baekjoon]11729번 하노이의 탑 이동 순서
문제 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 옮기려 한다. 한 번에 한 개의 원판만을 다른 탑으로 옮길 수 있다. 쌓아 놓은 원판은 항상 위의 것이 아래의 것보다 작아야 한다. 이 작업을 수행하는데 필요한 이동 순서를 출력하는 프로그램을 작성하라. 단, 이동 횟수는 최소가 되어야 한다. Python3 답 def hanoi(n, start, end, assist): if n == 1: print(start, end) return hanoi(n-1, start, assist, end) print(start, end) hanoi(n-1, assist, end..
[Django] HTTP 상태코드 응답
대표적인 상태 코드 코드 설명 200번대 성공 200 서버가 요청을 잘 처리했다. 201 작성완료. 서버가 요청을 접수하고, 새 리소스를 작성했다. 300번대 추가 조치가 필요하다. 301 영구 이동, 요청한 페이지가 새 위치로 영구적으로 이동했다. 302 임시 이동, 페이지가 현재 다른 위치에서 요청에 응답하고 있지만, 요청자는 향후 원래 위치를 계속 사용해야한다. 400번대 클라이언트 오류 400 잘못된 요청 401 권한없음 403 (Forbidden) 권한을 갖고 있지않아서 요청이 거부됨 404 서버에서 요청한 리소스를 찾을 수 없음 405 허용되지 않는 방법. POST 방식만을 지원하는 뷰에 GET 요청을 한 경우 500번대 서버 오류 500 서버 내부 오류 발생 200 응답 예 from djan..
[Django] ForeignKey
1:N 관계 models.ForeignKey로 표현한다. N측에 명시한다. (Post : Comment이면, Comment에 명시) ForeignKey(to, on_delete) to : 대상모델 클래스를 직접 지정하거나, 클래스명을 문자열로 지정한다. (자기 참조는 self) on_delete : Record 삭제시 규칙 CASCADE : FK로 참조하는 다른 모델의 Record도 삭제 PROJECT : ProtectedError (IntegrityError 상속)을 발생시키며, 삭제 방지 SET_NULL : Record가 삭제되었을시 null로 대체한다. 필드에 null=True 옵션 필수. SET_DEFAULT : 디폴트 값으로 대체한다. 필드에 디폴트 값 지정 필수. SET : 대체할 값이나 함수..
![[Django] django-debug-toolbar 사용하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdkYafY%2FbtrB5V940hS%2FjeOVQCVG3QBxmOS7L2H5yK%2Fimg.png)
[Django] django-debug-toolbar 사용하기
공식문서 django-debug-toolbar의 특징 현재 request/response에 대한 다양한 디버깅 정보를 보여준다. 다양한 Panel을 지원한다. SQLPanel을 통해, 각 요청 처리 시에 발생한 SQL 내역 확인 가능하다. Ajax 요청에 대한 지원은 불가능하다. 설치 및 실행 1. 설치 $ pip install django-debug-toolbar 2. settings.py 추가 INSTALLED_APPS = [ ... 'debug_toolbar', ... ] ... MIDDLEWEAR = [ ... 'debug_toolbar.middleware.DebugToolbarMiddleware', ... ] ... INTERNAL_IPS = ['127.0.0.1'] 3. (project)url..
[Django] django extensions shell_plus 사용하기
공식문서 extension shell_plus의 특징 장고 ORM이 어떻게 동작하는지 알아 볼 수 있다. 필요한 몇몇 기능들을 자동으로 import를 해준다. (주의사항)import 이름이 겹쳐버리면 overwirte 되어버린다. shell에서 직접 정렬하면 모델 Meta에 지정한 것이 무시가 된다. 설치 및 실행 1. django extensions 설치 $ pip install django-extensions 2. settings.py에 추가. INSTALLED_APPS = [ ... 'django_extensions', ... ] 3. 실행 $ python manage.py shell_plus --print-sql 실행하면 자동으로 import 해준다. # Shell Plus Model Import..
[Django] 장고 모델(ORM)
장고의 모델을 만들어 준 후, 쿼리가 어떻게 작동했는지 확인 할 수 있다. 모델 작동 확인 1. 모델 생성 # /models.py class Post(models.Model): message = models.TextField() created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) auto_now_add : 최초 생성 시간을 1번 사용하여 저장, 갱신 불가능 auto_now : 장고 모델이 저장 될 때마다 현재날짜(시간)으로 갱신, 갱신 가능 2. makemigration, migrate shell python manage.py makemigrations python manag..
![[Baekjoon] 2941번 크로아티아 알파벳](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsWE4d%2FbtrzdMAoR9d%2FLXPZHAdYF7ublRVRKEf9Kk%2Fimg.png)
[Baekjoon] 2941번 크로아티아 알파벳
문제 Python3 답 words = input() croatia = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z='] for i in croatia: words = words.replace(i, '*') print(len(words)) 코드 풀이 2글자가 합쳐진 크로아티아 코드는 1글자로 취급한다고 하여서, replace를 이용하기로 하였다. replace를 이용하여 글자를 변환한 뒤, 마지막에 문자열의 길이를 출력해주면 값이 나온다. replace replace는 문자열을 특정 문자로 변경하는 함수이다. 변수명.replace(old, new, [count])형식으로 사용한다. count의 기본값은 전체를 의미하는 -1로 지정되어 있다. a = 'test' a =..
![[DRF] simple-jwt와 cumstom user](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbHdnE%2FbtryF70Mbq3%2FHgh2ecqe8jJ5xPqFngLJT0%2Fimg.png)
[DRF] simple-jwt와 cumstom user
공식문서를 보면서 jwt와 user를 사용해보려고 한다. 여기서 소셜인증은 사용하지 않는다. 환경세팅 1. 패키지 설치 pip install djangorestframework pip install djangorestframework-simplejwt pip install django-allauth pip install dj-rest-auth 2. settings.py # settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfil..
[Python] str count 함수
string.count(self, x, _start, _end) _start, _end는 문자열 범위를 지정하고, 생략이 가능하며, 생략할 시 처음부터 끝까지 탐색한다. 대소문자를 구분한다. x에 문자 한개 또는 문자열로 입력이 가능하다. a, b, c = map(int, input().split()) # 2 2 2 result = list(str(a * b * c)) # 8 for i in range(10): print(result.count(str(i)), end=' ') # 결과 0 0 0 0 0 0 0 0 1 0
![[DRF] pagination custom](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaxLzv%2Fbtrw7Sih7dZ%2FJwJXpYdpVjf8tuNCSfgZA1%2Fimg.png)
[DRF] pagination custom
DRF의 pagination을 쓸 때, 나오는 결과에 총 페이지, 현재 페이지를 추가해보려고 한다. 결과부터 보자면 커스텀을 하지 않으면 결과는 이렇게 나온다. 그리고 커스텀을 하게되면 결과는 이렇게 나온다. Setting # models.py from django.db import models class Post(models.Model): title = models.CharField('TITLE', max_length=100) content = models.TextField('CONTENT') image = models.ImageField('IMAGE', upload_to='post/%Y/%m/', blank=True, null=True) # serializers.py from rest_framewor..