Django 5

Django와 S3연동 후, css 등 static file 로딩이 되지 않을 때 해결 방법

문제: django admin 접속 시, css가 적용되지 않는다 Django 로 개발하던 중, static file을 S3로 collectstatic 해주었다. 그 이후, django admin에서 css 등이 적용되지 않는 증상을 보였는데, 코드 문제는 아니었다. 이런 경우 문제의 가능성과 내 경우 무엇이 문제였는지 정리해둔다. 가능성 1: S3 연동 후, collectstatic을 재수행하지 않았다 S3에 연동 후에 반드시 collectstatic 해주어야 한다. 하지 않으면, S3 bucket 설정이 완벽해도, 자원이 없으므로 여전히 예쁘지 않은 admin페이지를 볼 것이다. 해결책 아래 스크립트 실행: S3에 static file을 업로드한다. ./manage.py collectstatic [-..

IT 2023.11.14

Django와 React 연동

Django와 react를 연동한다는 의미 Django는 웹 프레임워크이고, react는 프론트엔드 라이브러리이다. 사용의도의 핵심은 '유지보수'에 있다고 본다. 프로젝트 최종 구조 깊이 3레벨까지만 작성하였다 /django-react /backend /backend /앱이름 /manage.py /frontend /config /node_modules /public /scripts /src package.json yarn.lock Django & react 설치 선행 과제 가상환경 활성화 및 django 설치 yarn 설치 $ mkdir django-react $ cd django-react $ django-admin startproject backend $ npx create-react-..

IT 2019.09.29

CORS(Cross-Origin Resource Sharing)와 Django

CORS란 무엇인가? CORS(Cross-Origin Resource Sharing)란 웹 페이지 상의 제한된 리소스를 최초 자원이 서비스된 도메인 밖의 다른 도메인으로부터 요청할 수 있게 허용하는 구조이다(위키백과). 모노리틱 아키택처의 프로젝트에서는 이를 몰라도 별 문제가 없을 듯하다. 문제 상황은 MSA에서 개발할 때 발생한다(근본적인 문제는 도메인과 포트가 다르기 때문이다. 요즘 MVVM node 프로젝트는 프론트엔드와 백엔드가 셋트로 제공되기 때문에 문제가 되지 않는 것 처럼 보일 뿐이다. 만약 MSA이더라도 한 도메인, 한 포트에서 요청을 받아 내부적으로 알아서 처리하는 구조라면 django와 함께 사용하여도 전혀 문제가 되지 않는다). 프론트엔드앱에서 API백엔드서버(Django rest f..

IT 2019.08.03

React에서 csrf token 사용하기(with Django restframework)

React는 node모듈 위에서 동작하는 프론트엔드 라이브러리이다. Django 등의 API를 끌어다가 웹뷰를 구현할 수 있는데, 구현만 하면 뭐하겠는가. 결국 CRUD 기능은 최소한으로 동작하여야할 것이다. 대부분의 웹 프레임워크에서 csrf 공격을 방어하기 위한 수단이 갖춰져있는데, 이는 Django도 동일하다. Django와 template engin기반의 개발환경이라면, 안에 {% csrftoken %}작성 하나로 이란 코드가 자동으로 생성되지만, React의 장점인 템플릿엔진의 배제가 단점으로 돌아와서 해당 토큰을 컴포넌트화하는 코드를 직접 작성해주어야한다. //csrftoken.js import axios from 'axios'; import React from 'reac..

IT 2019.07.29

PYTHON Django에서 업로드된 Template(.html file)으로 동적 구현

HTML파일(django template 문법 포함)을 업로드하고, 해당 파일을 상황에 맞게 include하여, 렌더링하는 기능을 만들고 있었다. 정말 하루종일 삽질했는데, settings.py 설정을 잘 해주어야 했기 때문.. 그 외에 템플릿에서의 구현도 기존 미디어 파일들과 다르니, 끝까지 읽길 권장한다. 그렇기 때문에 오랜만에 포스트를 남겨본다. 1. settings # settings.py import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 여기까지는 djan..

IT 2019.06.05