일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Django
- API
- 파이썬
- django rest framework
- 알고리즘 풀이
- MAC
- 파이썬 알고리즘
- react
- PYTHON
- c++
- Baekjoon
- web
- js
- es6
- 장고
- AWS
- 백준
- Algorithm
- django ORM
- HTML
- 알고리즘
- java
- DRF
- form
- 알고리즘 문제
- javascript
- Git
- 알고리즘 연습
- CSS
- django widget
- Today
- Total
목록분류 전체보기 (341)
수학과의 좌충우돌 프로그래밍
투표 기능 구현하기 학교내 고양이 관리하는 사이트 UOSCAT 의 기능 중 일부이다. 길고양이 이니 만큼 이름을 투표를 통해 지어주었고 그 투표구현하는 방법을 알아보자. models.py 먼저 model 을 추가해줘야한다. 현재 있는 모델은 Cat 으로서 일반적인 Post 글에 해당한다. 각 Cat 마다 하나의 투표가 필요하므로 그 이름을 Vote 라고 한다. 그리고 Cat 과 Vote는 1대1 대응이다. 그리고 각 Vote마다 여러 개의 표가 존재하고 그 이름을 Choice 라고 하자. Vote와 Choice는 일대다 대응이다. class Vote(models.Model): created = models.DateTimeField(default=django.utils.timezone.now) # 투표는 ..
google cloud vision API 를 활용한 글자인식 사전 준비 vision API 뿐만 아니라 다른 google API를 사용하기 위해서도 사전준비가 필요합니다. 이에 대해 알아보도록 하겠습니다. 먼저 아래 url 로 접속합니다. http://console.developers.google.com 이 곳에서 우리는 사용자 인증 정보를 만들고 API 를 사용할 수 있는 key 를 받을 수 있습니다. 좌측 메뉴바에서 사용자 인증 정보 로 이동하면 사용자 인증 정보 만들기 라는 버튼을 찾을 수 있습니다. 버튼을 클릭하면 인증 정보를 만들 수 있는 다양한 방식을 선택할 수 있습니다. 서비스 계정 키를 이용해서 만들어보도록 하겠습니다. 계정이름과 계정 ID를 적어주고 키 유형은 JSON 을 이용해서 받도..
글 수정 시 기존의 내용 불러오기 글 수정 기능을 구현했지만 수정을 하게 되면 처음부터 글을 다시 쓰는 것과 다를 바가 없었다. 따라서 이를 해결하기 위해서 기존의 데이터를 불러오도록 했다. 먼저 기존에 존재하던 글 수정 함수 edit을 살펴보자. from .form import CatPost def edit(request, cat_id): cat = Cat.objects.get(id=cat_id) # 글을 수정사항을 입력하고 제출을 눌렀을 때 if request.method == "POST": form = CatPost(request.POST, request.FILES) if form.is_valid(): print(form.cleaned_data) cat.name = form.cleaned_data[..
삭제 시 경고창 띄워주기 현재 post 한 글과 댓글이 삭제 버튼을 누르게 되면 망설임없이 바로 삭제 된다. 삭제 시에는 복원이 불가능하고 실수할 가능성이 있기 떄문에 경고창을 띄워서 이를 해결하자. post한 글과 댓글 경고창을 처리한 방식의 약간의 차이가 있어서 따로 다뤄주겠다. post 글 삭제 경고창 우선 기존의 삭제는 a 태그를 통해서 글을 삭제하는 기능을 수행하도록 url을 넘겨주었다. Delete 이제 바로 url을 넘겨주지 않고 modal 을 띄워준 후 modal 에서 삭제하기 를 누를 시 이 url로 넘어가도록 하겠다. 기존의a 태그를 수정해주자. Delete data-toggle="modal": 모달 창을 여는 역할 data-target="#CatModal": 모달의 id로 연결해주는 ..
파이썬 제너레이터 일반적인 함수부터 생각을 해보자. 함수는 한 번 호출되면 return을 만날 때까지 혹은 return이 없다면 마지막 구문을 만날 때까지 실행된다. 그리고 호출이 끝나는 순간 내부 함수나 로컬 변수들은 메모리를 반환하게 된다. 이는 함수가 다시 호출되어도 마찬가지로 같은 일을 반복한다. 이런 함수의 한계점에 봉착하여, 함수가 본인이 한 일을 기억하고 있다가 재 호출 시 이어서 할 수 있도록 새로운 함수를 만들었는데 이를 제너레이터라고 한다. 제너레이터가 무엇인지 예제를 통해서 알아보자. def normal_function(list): result = [] for i in list: result.append(i * i) return result input = [1,2,3,4,5] resu..
div에 이미지 꽉 채우기 이미지 크기에 따라서 div를 뚫고 나오기도 하고, 여러 문제가 발생한다. 그래서 div 크기에 딱 맞도록 이미지를 넣는 방법을 알아보고자 한다. img 태그를 이용해 고양이 사진을 넣고 이를 div로 감싸주었다. 이제 div에 크기를 결정해주어서 사용하려고 한다. .image-container{ width: 300px; height: 300px; } 하지만 그 결과 고양이 이미지가 div를 뚫고 나오게 된다. 파란색 영역엔 div를 무시하고 이미지 크기에 따라 들어간 것을 확인할 수 있다. 이럴 경우에는 다음과 같이 해결할 수 있다. .image-container{ overflow: hidden; display: flex; align-items: center; justify-..
js 로 Django 값 받아오기 기본적으로 Django의 파이썬 변수는 템플릿 변수를 통해서 값을 넘겨준다. 하지만 기본적인 템플릿 변수만으로는 제한사항이 있었다. 우선 파이썬 views.py 에서 정의한 딕셔너리 타입의 값을 js 로 넘겨주고자 하였다. view.py choices = Choice.objects.filter(vote_id=cat.vote.id) choices_name = [choice.as_dict() for choice in choices] as_dict() 는 models.py 에서 정의한 메소드로 model.py의 일부는 다음과 같다. models.py class Choice(models.Model): vote = models.ForeignKey(Vote,on_delete=mod..
클래스 클래스 정의 클래스는 class 키워드로 시작한다. 이어서 클래스의 이름을 적고 중괄호 안에 필드와 메소드를 나열하는 형식이다. public class Dog { String name; void bark() { System.out.println("왈왈"); } } Dog라는 클래스 이름으로 필드로는 강아지의 이름 name 을 메소드로는 강아지의 울음소리를 출력하는 bark() 를 정의했다. 이들은 클래스의 맴버 라고 불리며 위와 같이 필드는 상태를 메소드는 동작을 나타낸다. 객체 생성 클래스는 객체를 만들기 위한 틀에 불과하다. 이 틀로 객체를 찍어내야한다. 위에서 정의한 Dog 클래스의 객체를 생성해보자. class Dog { String name; void bark() { System.out...
배열 배열의 선언과 사용 자바에서 배열은 객체이다. 그렇기 때문에 변수 선언시 배열 참조 변수를 선언해주어야한다. 그 방법은 아래와 같다. int[] s; int s[]; 이 부분에서 int 는 배열 요소들의 자료형을 s 는 배열의 이름을 의미한다. 배열 참조 변수를 선언하였지만 아직 배열을 사용할 준비는 되지않았다. 배열을 사용하기 위해서는 new 연산자 를 통해 생성해줘야한다. (이에 대해서는 뒤에서 객체에 대한 내용을 학습하며 다시 이해하도록 하자. ) 생성하는 방법은 다음과 같다. s = new int[10]; 위에서 생성한 배열 참조 변수의 배열의 크기를 10개로 생성한 것이다. 위 두 식은 다음과 같이 합쳐서 사용할 수 있다. int[] s = new int[10]; 이 때 배열은 자동으로 초..
이진 탐색 알고리즘 (Binary Search) 이진탐색의 특징 log N 의 시간복잡도 데이터가 정렬되있는 배열에서만 사용가능 반복문, 재귀함수를 통한 두 가지 방법으로 구현 가능 반복문을 통한 이진 탐색 구현 int search(int *arr, int length, int target) { int start = 0; int end = length-1; int mid = 0; while (start target) end = mid-1; } } return -1; } 재귀함수를 통한 이진 탐색 구현 int recursive_search(int *arr, int start, int end, int target) { int mid = (start+end) / 2; if (start > end) return..