오히려 좋아..

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

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

Django 17

[Django] Trouble Shooting

1. The number of GET/POST parameters exceeded settings.DATA_UPLOAD_MAX_NUMBER_FIELDS 한번에 보낼 수 있는 GET/POST 파라미터 개수가 셋팅해 놓은 값보다 많이 요청했음(default 1000개) config->settings.py 으로 가서 아래 변수를 선언해준다. DATA_UPLOAD_MAX_NUMBER_FIELDS = 4000 2. MultipleObjectsReturned at /main/ get() returned more than one Stations -- it returned more than 20! modelClass.objects.get(id=id)와 같은 방식으로 쿼리셋을 날렸을 때 반환되는 클래스가 여러개일때 발생..

[Django] 프로젝트에 등록되어 있지 않은 파일에서 장고 사용하기

프로젝트에 startapps 명령어로 생성되지 않은 파일에서 장고에 등록된 모델이나 함수를 사용할 때 다음과 같은 에러가 발생한다. django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings. 이를 해결하기 위해선 환경을 장고에 맞춰주기 위해서 다음과 같은 코드를 from user.models import model 과 같은 파일 위쪽에 선언해..

[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가 사용된 폼 템플릿에 삽입해야한다.