backend/Django&Python 15

[Django] ORM 성능 최적화 N + 1 Problem

ORM이란 Object Relation Mapper 객체와 관계형 data를 자동으로 매핑해주는 것. 객체를 통해 간접적으로 database data를 다룬다. ORM의 장점 객체지향적인 코드로 인해 더 직관적이고 비즈니스 로직에 더 집중 할 수 있게 해준다. 재사용 및 유지보수 용이 DBMS에 대한 종속성이 줄어든다. ( MySQL -> PostgreSQL로 바꿔도 금방 테이블 생성 가능.) ORM의 단점 ORM으로만 완벽한 서비스를 구현할 수 없다. 프로시저가 많은 시스템에선 ORM의 객체 지향적인 장점을 활용하기 어렵다. 프로젝트의 복잡성이 크면 구현하는 난이도가 상승한다. N + 1 Problem django ORM은 Lazy-Loading 방식 ORM에서 명령을 실행할 때마다 데이터베이스에서 데..

[Python] 파이썬 requests, json으로 REST API data 보내고 받기

카카오톡 2차 정답이 없는 문제. 요구사항을 기반으로 trade-off를 감안해 로직을 설계. 로직을 개선해가는 역량. REST API 호출. API결과가 JSON 포맷. REST API 호출 처리 모듈, JSON 파서 사전 준비. pprint, bs4 쓸수있나? 일단 깔아놔보기. JSON? Java Script Object Notation. 통신을 통해 데이터를 주고 받는데 사용되는 규칙, 형식 JSON은 dictionary에 key - value 형식으로 이루어진다. REST API로 이용해 받아온 값을 JSON형태 import json, requests response = requests.get(URL).json() response = requests.post(URL,header,data).json..

[Django] decorator 데코레이터

Django Decorator 장고는 다양한 HTTP기능을 지우너하기 위해 view에 적용할 수 있는 여러 데코레이터를 제공한다. HttpResponseNotAllowed클래스의 요건이 맞지 않으면 반환된다.['GET','POST']형식의 매개변수. HTTP 메서드 require_http_methods from django.views.decorators.http import require_http_methods @require_http_methods(["GET", "POST"]) def my_view(request): # I can assume now that only GET or POST requests make it this far # ... pass require_GET require_POST re..

[Django] 장고 html template문법

장고 생활코딩 장고 템플릿 문법. {% extends "base_generic.html" %} {% block title %}{{ section.title }}{% endblock %} {% block content %} {{ section.title }} {% for story in story_list %} {{ story.headline|upper }} {{ story.tease|truncatewords:"100" }} {% endfor %} {% endblock %} {{}}두개는 변수. 뷰에서 탬플릿으로 context전달이 가능하다. 함수에서 html문서로 객체의 전달이 가능하다. sectin.title은 뷰에서section이라는 객체를 html문서로 보냈다는 뜻이고 그 안에 title속성을 전달..

[Django] admin 페이지 커스텀하기

첫번째 장고 앱 작성하기, part 7 관리자 폼 커스터마이징 수정 폼의 필드를 재정렬해 작동하는 법을 본다. admin.site.register(Question) 를 아래와 같이 수정한다. from django.contrib import admin from .models import Question class QuestionAdmin(admin.ModelAdmin): fields = ['pub_date', 'question_text'] admin.site.register(Question, QuestionAdmin) 모델의 관리자 옵션을 변경해야 할 때마다 모델 어드민 클래스를 만든 다음, admin.site.register()에 두 번째 인수로 전달한다. 수십 개의 필드가 있는 폼에 관해서는 폼을 fi..

[Django] 배경이미지 추가하기

첫번째 장고 앱 작성하기, part 6 앱의 모양과 느낌을 원하는대로 바꿔보세요 특별한 것은 정적 파일을 static 디렉토리에 모아 관리한다는 것 이외는 없다. 정적파일을 저장할 static 리렉토리 디렉토리를 지정함은 네임스페이싱을 통해 파일을 구별짓기를 원한다는 의미이다.(이름이 동일한 다른파일과) {% load static %} static 탬플릿 태그는 정적파일의 절대경로 URL을 생성한다. 배경 이미지 추가하기. images 서브 디렉토리 추가 * { padding: 0; margin: 0; box-sizing: border-box; } ul { font-family: 'Open Sans', sans-serif; font-family: 'Roboto', sans-serif; background..

[Django] 자동화된 test code 짜기. 예제

첫 번째 장고 앱 작성하기, part 5 자동화된 테스트 작성. 자동화된 테스트 소개 자동화된 테스트란 무엇입니까? 테스트는 다양한 수준에서 작동합니다.(4수준) 유닛테스트 : 특정 모델 메서드는 예상대로 값을 반환합니까? E2E테스트 : 사이트에서 사용자 입력 시퀀스가 원하는 결과를 생성합니까? 테스트 자동화는 한 번 작성한 이후에 앱을 변경할 때 수동 테스트를 수행하지 않아도 원래 의도대로 코드가 동작하는지 확인 가능 테스트 자동화는 처음엔 어렵고 복잡할지 모르나 결국 수정과 에러를 적게하는건 테스트코드 과거엔 아키텍처 설계를 통해 시간과 비용을 절약했다면 이제는 테스트코드와 예외처리를 통해 그것이 이루어짐. 테스트를 통해 시간을 절약 특정 시점까지는 제대로 작동하는지 확인하는 테스트로 충분. 하지만..

[Django] Views templates 사용해보기(generic views)

첫 번째 장고 앱 작성하기, part 4 양식 처리 및 코드 축소 Write a minimal form HTML from 추가(question에 대한 radio box) vote 객체 구현 결과지(results) 템플릿 view 결국 {}문법은 jsx문법 처럼 js 코드를 넣기 위한 문법. 제너릭 뷰 사용하기: 적은 코드가 더 좋습니다 일반적인 경우(URL에서 전달된 매개변수에 따라 DB에서 DB를 가져오고 템플릿을 로드하고 렌더링된 템플릿을 리턴하는 경우)를 위해 generic view라는 shortcut을 제공함. URLconf 수정 불필요한 오래된 view 삭제 장고의 generic view를 기반으로 새로운 뷰를 도입. URLconf 수정 패턴 경로 문자열에서 일치하는 패턴 이름들이 questio..

[Django] View단 연결하기

얘는 좀 더 정리할 예정. 첫 번째 장고 앱 작성하기, part 3 view는 장고가 일반적으로 특정 기능과 템플릿을 제공하는 웹 페이지의 종류. 뷰 요청된 페이지의 내용이 담긴 HttpResponse의 반환 Http404같은 예외 발생 둘 중 하나를 하도록 설계. # from django import template from django.http import HttpResponse # from django.template import loader # 숏컷으로 render 사용. template에 context를 채워넣어 표현한 경과를 HttpResponse객체와 함꼐 돌려주는 구문. render from django.shortcuts import render,get_object_or_404 from d..

[Django] DB설치하기 migration 익히기

첫 번째 장고 앱 작성하기, part 2 DB 설치하기 Django는 기본적으로 SQLite를 사용하도록 구성 되어 있다. 기본 제공 데이터베이스고 나중에 실 프로젝트 할때는 좀 더 확장석 있는 데이터 베이스를 사용하는 것이 좋다.DB바인딩 후 DATABASES default항목값 ENGINE, NAME 등 키 값 성정하기.DATABASES SQLite는 DB파일이 필요할 때마다 자동생성되나 타 DB는 DB 생성 따로 해줄 것. my-site/settings.py에서 TIME_ZONE값 설정 할 것. 기본값은 USE_TZ이므로 검색해가서 수동설정할 것. INSTALLED_APPS = [ 'polls.apps.PollsConfig', 'django.contrib.admin', 'django.contrib...