오늘은 장고 실무 기초 강의와
팀원들과 코딩 테스트 문제 하나를 풀었다.
강의에서는 ORM과 QuerySet이 설명이 적어서
따로 찾아보며 완벽하게 익혔다!
01. Django ORM / QuerySet
1) Django ORM 이란?
- 데이터베이스를 하나의 '객체(object)'로 보고, SQL 쿼리문 없이 데이터베이스의 데이터들을 다룰
수 있게 하는것
2) 쿼리셋(QuerySet) 이란?
- 전달받은 모델의 객체 목록을 말한다. 예를들어, person.objects의 의미는 objects라는 객체가 person이라는 데이터베이스를 쿼리셋 형태로 만들겠다는 의미이다. 쿼리셋은 '객체' 이지만 일반적인 객체에서 사용하는 속성(객체.변수 / 객체.함수()와 같은 속성)들을 사용할 수 없다. 쿼리셋은 데이터베이스의 여러 레코드(row)를 나타낸다.
02. QuerySet Method
1) Method 사용법
- [클래스명].objects.메소드()
2) Method 종류
- .all()
- .filter()
- .get()
- .values()
- .exclude()
- .first()
- .last()
- .count()
3) 이번에 사용한 Method
- .filter()
- 특정 조건에 맞는 Row만 조회하고 싶을 때 사용. QuerySet 타입으로 반환
exist_user = UserModel.objects.filter(username=username)
- .get()
- 하나의 Row만 조회한다. .get()은 QuerySet 타입이 아닌 객체 타입으로 반환하기 때문에 뒤에 다른 메소드를 추가 할 수 없다.
- 값이 없을 때는 DoesNotExist 에러를 발생시킨다.
- 값이 한 개가 아닐 경우에는 MultipleObjectsReturned 에러를 발생시킨다.
03. GET / POST / 주요 기능
GET과 POST는 인터넷으로 통신하는 방법이다.
좀더 자세하게 알아보면,
1) GET 요청
- 값을 읽어 올 때 사용
2) POST 요청
- 값을 주거나 수정, 삭제를 요청 할 때 사용
3) 사용 예시
- request.method == 'GET' or request.method == 'POST' : GET 또는 POST 용청이 들어 올 경우 라는 뜻
- request.POST.get('username', None) : post로 가져온 데이터 중에 username이라는 이름의 데이터를 가져오고
만약 username이 없다면 None(빈칸)으로 처리하겠다 라는 뜻 - render(request, 'user/signup.html') : user 폴더의 signup html을 화면에 보여주겠다 라는 뜻
- .save() : 저장 기능
- html에서의 <form 태그> : 화면에 있는 데이터를 서버로 전송할 때 사용
- {% csrf_token %} : 장고에서 데이터를 post 방식으로 보낼 때 보안을 지켜주는 기능
04. {% ... %}
{% ... %}이란?
- 템플릿 문법으로써 중복해서 html을 계속 작성하지 않아도 되도록 도와주고 html 파일에 파이썬의
기능들을 추가해 줄 수 있도록 도와주는 기능
05. 팀원들과 알고리즘 풀이
https://school.programmers.co.kr/learn/courses/30/lessons/120842
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'2차원으로 만들기' 라는 문제인데 처음에 접근한 방법은 다음과 같다.
def solution(n_list, n):
n_ = []
list_n = []
a = 0
num = 0
while (a < len(n_list)//n):
for i in range(1, len(n_list)//(len(n_list)//n)+1):
n_.append(n_list[num])
num += 1
a += 1
list_n.append(n_)
return list_n
리스트 n_ 에 n의 수만큼 기존의 리스트를 묶으려고 for i in range(1, len(n_list)//(len(n_list)//n)+1) 문을 사용 하였고,
리스트 n_ 에 n_list[index]를 추가하는 식으로 할려 했으나 원하는 것처럼 안나왔다..
같은 팀원분에게 힌드를 얻어서 list_n.append(n_) 다음줄에 n_ = [] 을 넣음으로써 해결을 했다! 이러한 이유는 while문을 반복할때 기존의 리스트 n_의 값은 기존의 값에서 계속 추가가 되기때문에 이런 문제가 생긴것이다. 따라서 n_ = [] 을 넣으면 기존의 값이 빈값으로 초기화 되고 뒤에 값들이 들어가서 원하는 값이 나온다. 최종 코드는 다음과 같다.
def solution(n_list, n):
n_ = []
list_n = []
a = 0
num = 0
while (a < len(n_list)//n):
for i in range(1, len(n_list)//(len(n_list)//n)+1):
n_.append(n_list[num])
num += 1
a += 1
list_n.append(n_)
n_ = []
return list_n
다음은 다른 팀원분들의 다양한 방법이다
# 1
def solution(num_list, n):
answer = []
small_list = []
for num in num_list:
small_list.append(num)
if len(small_list) >= n :
answer.append(small_list)
small_list = []
return answer
# 2
import numpy as np
def solution(num_list, n):
return np.reshape(num_list, (int(len(num_list)/n),n)).tolist()
'내일 배움 캠프 > TIL' 카테고리의 다른 글
TIL) 5주차 1일 (0) | 2023.04.11 |
---|---|
TIL) 4주차 4일 - 장고 실무 기초 (0) | 2023.04.07 |
TIL) 4주차 2일 - 장고 실무 기초 (0) | 2023.04.05 |
TIL) 4주차 1일 - 장고 실무 기초 (0) | 2023.04.03 |
TIL) 3주차 4일 (0) | 2023.04.01 |