Django 13

[django] database is locked - 원인파악 | 해결방안

1. 원인 파악Django에서 "database is locked" 오류는 SQLite3 데이터베이스에 현재 다른 프로세스가 잠금을 걸고 있는 상태에서 데이터베이스 작업을 시도할 때 발생합니다. 이 문제는 여러 가지 이유로 발생할 수 있습니다:동시 접근: SQLite3 데이터베이스는 낮은 트래픽에서 중간 트래픽까지를 처리하도록 설계되었습니다. 높은 수준의 동시 쓰기는 데이터베이스가 잠기는 결과를 초래할 수 있습니다.장시간 실행되는 트랜잭션: 트랜잭션이 완료되는 데 오랜 시간이 걸리면, 데이터베이스에 잠금을 걸어 다른 트랜잭션이 진행되지 않게 할 수 있습니다.파일 잠금 문제: SQLite는 동시성을 관리하기 위해 파일 잠금을 사용합니다. 파일 시스템 잠금 메커니즘에 문제가 있으면 데이터베이스가 잠길 수 있..

[django] model object update 방법 정리

django에서는 모델 객체를 업데이트 하는 방법이 여러가지가 있다.쓸때마다 이거였지 생각은 나는데 정확하지 않아 계속 찾아보고 하는 과정이 반복되어이번 기회에 정리하고자 한다.django developer들에게 조금이나마 도움이 되길 바란다.  목차  Queryset.update()"django model update"를 검색했을 때 가장 많이 나오는 방법이다. 즉시 적용(applied instantly)obj.save() 필요 없음update()매서드를 호출하는 순간 데이터가 변경된다.save()보다 더 빠르다(Queryset의 특징인 laziness가 적용되지 않는다.) 외부 테이블의 필드는 수정 불가해당 테이블의 데이터필드만 수정 가능하고 외래키로 수정은 불가하다.>>> Entry.objects...

[django] django로 포트포워딩(port forwarding)하는 방법 (w. middleware)

django로 포트포워딩(port forwarding)하는 방법- Django 애플리케이션에서 클라이언트가 어떤 도메인을 통해 접근했는지를 확인하고, 해당 도메인에 따라 다른 페이지로 리다이렉션하는 방법  배포 관점에서 그려본 프로젝트의 전체적인 흐름이다. 처음에는 django admin페이지를 이용한 서비스를 구현했다.따라서 back과 front모두 django안에서 해결 할 수 있었다. 도메인을 하나 구입해서 Route53을 이용해서 호스팅을 했고,subdomain으로 first를 붙여 (예) first.webname.net으로 배포했었다. 탄력적 IP를 이용해서 내가 배포한 EC2에 고정적으로 접근할 수 있도록 설정해두었고,django 웹앱을 포트번호 8000번을 이용했다. 여기까지는 문제 없다. ..

[django] django template에서 settings.py variable불러오는 방법

How to use settings.py variables in django template ? >>> Use custom_tag!개발을 하다 보면 로컬환경, 개발환경, 배포환경 등 여러가지 환경에서 테스트해야하는 상황이 생긴다.테스트 할때마다 각 환경에 맞는 환경설정 값을 바꾸는 건 굉장히 비효율적인 작업이고 작업 집중력도 떨어뜨리며 능률도 떨어지게 된다. 그래서 나 같은 경우는 secrets.json에 환경변수값들을 키값과 함께 저장해놓고 각 환경에서 secrets.json파일만 바꾸는 식으로 개발을 진행한다. 뭐가 되었든 각설하고 django template에서 환경에 따라 값을 다르게 넘겨줘야 하는 상황이 생기는데 이 때 settings.py에서 정의한 변수를 가져오게 된다면 문제가 간단하게 해결..

[django] ImageField upload_to 동적 업로드(함수 사용)

장고 imagefield에서 image데이터를 업로드할 때 dynamic upload가 가능하다. 장고에서 사용자가 사용하는 폴더가 media라고 보통 정해놓는데 이 media폴더에 이미지를 업로드할 때 이름을 따로 지정해주는 것을 dynamic upload라고 한다. ImageField의 upload_to옵션은 이미지가 저장되는 경로를 넣어주는 옵션인데 여기에 함수를 만들어서 동적 업로드가 가능하게 할 수 있다. # models.py def image_upload_to(instance, filename): ext = filename.split('.')[-1] # 이미지 파일 형식 따오기 return os.path.join(instance.UPLOAD_PATH, "%s.%s" % (uuid.uuid4()..

[django] debug_toolbar 세팅

django debug 툴바 설치 및 세팅 방법입니다. 1. install Package pip install django-debug-toolbar pip install -e git+https://github.com/jazzband/django-debug-toolbar.git#egg=django-debug-toolbar 둘중 한 방법을 선택해서 사용하고 있는 가상환경에 django-debug-toolbar패키지를 설치해준다. 2. Check for Prerequisites 이 설정은 startproject를 할 때 이미 세팅이 되는 부분이라서 웬만하면 따로 손볼일은 없고, 아래 코드처럼 되어잇는지 확인만 하면 된다. # 프로젝트 디랙토리/settings.py INSTALLED_APPS = [ # ... ..

[django] Related Field got invalid lookup: icontains 오류

search_fields 옵션에 원하는 필드들을 넣어서 admin페이지에서 검색 가능하도록 만들려고 하는 중에 "Related Field got invalid lookup: icontains" 이런 오류에 맞딱뜨렸다. 아래 코드가 admin.py에서 오류가 났었던 코드이다. models.py를 보면 title, content 필드는 Post테이블 자체필드이지만 username 은 User라는 테이블에서 외래키로 연결시켜놓은 상태이다. 즉 username필드는 User테이블과 연결시켜주는 고유값일 뿐이다. 따라서 django는 User테이블에서 어떤 필드를 가지고 검색해야 하는지 모르는 것이다. 그래서 에러가 났을 뿐... # models.py class Post(BaseModel): username = ..

[django] User모델 커스터마이징 할 때 오류

AbstractUser를 사용해서 User모델을 커스터마이징 하고 나서 마이그레이션 할 때 아래와 같은 오류가 났을 때 해결방법 장고에서 만들어 둔 User 모델이 아니라 내가 커스텀해서 만든 User모델을 사용하고자 하는 것이므로 장고한테도 이 사실을 알려줘야 한다. 프로젝트 디렉토리의 settings.py에 AUTH_USER_MODEL 환경 변수를 '[앱이름].[모델이름]'이런식으로 지정해주면 된다. 예시) AUTH_USER_MODEL = 'users.User'

[django] ImageField Form 이미지 업로드하기.

django Form에서 이미지를 업로드해서 DB에 저장하는 기능을 구현하는 방법이다. 이미지 파일이 form에서 view로 넘어가지도 않는 문제, view에서 조회하는 문제들을 해결하였다. 1. media폴더 경로 설정 프로젝트 폴더 settings.py 마지막줄에 MEDIA_URL, MEDIA_ROOT 추가 # setting.py # ... 이외의 기본 세팅들 MEDIA_ROOT = BASE_DIR/'media' MEDIA_URL = '/media/' 프로젝트 폴더 urls.py에 urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 추가 # urls.py from django.contrib import admin f..

[django] 프로젝트 배포 시 sqlite3 버전 오류

django프로젝트를 만든 후 aws나 gcp에 배포하려고 할 때 sqlite3의 버전 오류가 나는 경우가 많다. 이때 linux기반 OS에서 sqlite3를 쉽게 설치하는 방법이다. linux기반 지식이나 명령어들을 잘 몰라서 많이 해맸는데 아래의 명령어로 쉽게 해결할 수 있었다. 오류 내용 : django.core.exceptions.ImproperlyConfigured: SQLite 3.9.0 or later is required (found 3.7.17). sqlite3.9버전 이상을 설치해주어야 한다. koipkgs에 sqlite3 버전 별 설치파일들이 있고 이 파일들을 찾아서 다운로드 후 설치해주면 된다. 명령어 wget https://kojipkgs.fedoraproject.org//pack..