오히려 좋아..

상황이 나쁘게만 흘러가는 것 같을 때 외쳐보자.. .

궁금한 마음으로 포트폴리오 보기

Web Programming/Django 25

[Django] 장고 쿼리셋 파헤치기(Eager Loading)

아래 내용은 김성렬님의 2020 Pycon-Korea Django ORM (QuerySet)구조와 원리 그리고 최적화전략을 정리해둔 내용입니다. https://www.youtube.com/watch?v=EZgLfDrUlrk 장고는 ORM(Object Relational Mapping)을 이용해 데이터를 관리한다. ORM은 데이터 베이스를 코드를 이용해 관리할 수 있도록 구현한 인터페이스로서 좀 더 쉽게 데이터베이스의 동작을 관리할 수 있도록 하는데 목적이 있다. 하지만 ORM은 편리함의 반대 급부로 성능상 손해를 본다. 이번 포스팅에서는 장고 ORM의 단점인 Lazy Loading 그리고 단점을 해결하기 위한 방법에 대해 알아보도록 하겠다. 1. ORM 단점: Lazy-loading(지연 로딩) 지연 로..

Django - 관리자 페이지에서 엑셀 출력 방법

한글 출력 때문에 꽤 고생했다.. HttpResponse에서 charset ='euc-kr'로 바꿔 출력하면 된다. #app -> admin.py 에 다음과 같이 작성한다. actions = ["export_as_csv"] def export_as_csv(self, request, queryset): """ return Export as csv File """ meta = self.model._meta #모델이름을 불러온다. response = HttpResponse(content_type="text/csv") #기본 인코딩 방식은 utf-8이므로 한글 출력을 원할때는 아래 주석과 같이 작성한다. #response = HttpResponse(content_type="text/csv", charset = ..

Django - 사용자별 관리자 페이지 접근권한 수정

관리자 페이지는 다양한 사람들이 오갈 수 있다. 그렇다면 사용자 별로 관리자 페이지 접근권한을 제한할 수 없을까? user app을 하나 생성 후 Custom된 User 모델을 사용한다. from django.contrib.auth.models import AbstractBaseUser,BaseUserManager,PermissionsMixin from django.db import models class UserManager(BaseUserManager): use_in_migrations = True def create_user(self, email, nickname, password=None): if not email : raise ValueError('must have user email') use..

[Django] CSRF Forbbiden

CSRF Fobbiden CSRF란? Cross-site Request Forgery의 약자로 해석하면 사이트간 요청위조를 의미한다. 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트를 요청하게 하는 공격을 의미한다. 공격자가 사이트의 URL 패턴을 해석해 비밀번호 변경이나 개인정보 접근 권한을 주는 URL을 특정 사용자에게 보내고 클릭했을 때 공격자가 원하는 행위를 웹사이트에 요청하게 된다. 이를 막기 위해 Django에서는 1.2 버전부터 모든 POST방식의 폼 전송시 hidden 필드로 세션에 따른 임의의 키를 제공하고 요청의 키값이 매번 유효한지 사용한다. 대표적으로 사용되는 방식은 아래와 같이 {% csrf_token %} 를 POST가 사용된 폼 템플릿에 삽입해야한다.