목록분류 전체보기 (413)
오답노트

Static File static file은 정적인 자료를 의미하는데 HTML, CSS, JS, Django Template, Image 등을 의미한다. static file 위치는 앱 폴더 아래 static 폴더 또는 settings.py에 STATICFILES_DIRS에 지정한 곳 있다. https://docs.djangoproject.com/en/3.2/howto/static-files/ Django The web framework for perfectionists with deadlines. docs.djangoproject.com settings.py 에 STATICFILES_DIRS 변수가 없을 경우 위 경로를 참고하여 아래처럼 지정하도록 하자. 또 개발이 완료되고 서비스할 때, 위에서 설명한..

기본 View 이전 포스트에서 사용하던 View 형태는 함수 기반의 View를 만들었다. 또 Class 기반의 View도 작성할 수 있는데 아래에서 확인 해보자. views.py 에는 다음과 같이 Class 기반 View를 선언했다. urls.py 에는 다음과 같이 위 View를 호출하도록 한다. 보통 함수 기반 View에서 호줄하지 않는 as_view를 호출한다. as_view는 뭘까? 우선 class 기반 view가 View 클래스를 상속 받는 것을 알아야한다. get은 View 클래스에 있는 메소드로 GET요청이 있을 때 실행되는 함수이다. as_view또한 View 클래스 안에 선언되어 있는 메소드이다. https://ccbv.co.uk/projects/Django/4.1/django.views...

GET 과 POST HTML에서 요청을 하는 방식중에 GET 과 POST 라는 것들이 존재한다. 나중에 REST를 참고하여 공부해보자. GET은 요청정보 헤더에 담겨 전달되는 방식이다. 따라서 전달하려는 정보다 노출이 되고, 길이에도 제한이 있다. POST는 요청정보 바디에 담겨 전달되는 방식이다. 따라서 전달하려는 정보를 은폐할 수 있고, 길이 제한도 없다. 위에서 비교를 보면 POST가 더 좋아보이지만, GET은 정보를 조회할 때, POST는 정보를 생성할 때 자주 사용된다.(예외도 물론 존재함) CSRF (Cross-Site Request Forgery) 예전에는 GET방식으로 로그인도 하고 그래서 개인정보 유출이나 이런 것들이 취약했다고 한다. 그래서 POST 방법으로 로그인과 같은 민감한 정보들..

Manager Manager는 기본적으로 models.py 내 선언한 클래스는 objects로 사용 가능하다. 하지만 모종의 이유로 할당 받아 사용 할 경우 Manager로 할당하여 사용할 수 있다. 이 때, objects는 사용할 수 없다. test_manager = models.Manager() 위 코드를 models.py의 (models.Model 상속 받은)클래스 내에서 선언하면 test_manager는 objects 처럼 사용 할 수 있다. (단, 기존 object는 사용 불가능) QuerySet 위에서 설명한 Manager는 QuerySet이라는 객체다. 이는 메소드를 통해 테이블의 내용을 조회하거나 추가, 수정, 삭제가 가능하다. 기능만 확인하기 위해 웹페이지에 출력하지 않고 장고 쉘을 이용..

1:1 관계 1:1 관계는 두 테이블의 row가 서로 1:1 관계를 의미한다. 이러한 관계가 되도록 model을 작성해보자. Test2라는 모델을 생성했다. test는 외래키로 Test 모델과 1:1관계를 나타내고 있다. ForeignKey로 다른 모델과 1:1 관계를 만들 수 있다. 이때 on_delete 관계는 참조하는 인스턴스가 삭제 되었을 때 처리방식을 지정한다. 위 화면은 Test2에서 데이터를 추가할 때, Test의 정보를 가지고 1:1 관계를 형성해 추가한다. M:N 관계 다대다 관계를 갖는 모델을 만들 수 있다 ManyToManyField 로 다대다 관계를 갖을 모델을 선택하면 서로 다대다 관계를 갖게된다. 참고로 아래는 다대다 관계를 갖는 모델이다. 1:M 관계 1:M 관계는 위 관계들과..

Template 사용자의 요청에 대해 View 함수에서 응답하는 HTML 파일을 장고에서는 템플릿이라고 한다. Template 환경설정 프로젝트 파일 아래 settings.py에 TEMPLATES를 확인하자. BACKEND는 템플릿을 만드는 엔진을 정의하는 곳이다. 여러 종류의 엔진이 존재하는데 스스로 찾아보자. 그리고 HTML 파일을 찾아가는 경로를 찾는 위치는 INSTALLED_APPS에 등록된 앱안에서 위에서부터 차례대로 들어가 templates 라는 폴더를 찾는다. 만약 앱안에 templates 라는 폴더가 없다면 다음 앱을 찾는 방식이다. 만약 모든 앱에 templates라는 폴더가 없다면 TEMPLATES에 DIRS에 위치를 지정한 곳에서 찾는다. 템플릿을 사용하려면 위 두 디렉토리중 하나에는..

View에서 Model 사용 모델은 테이블에 등록된 내용을 가져올 수 있는 object라는 객체가 존재한다. 이 object를 통해 view에 테이블 내용을 출력해보자. 우선 모델 객체를 반환할 때를 위해 다음과 같이 models.py에서 모델을 수정하자. 그리고 테이블에 등록된 항목을 받아오기 위해 views.py에 다음과 같이 함수를 생성하자. 이제 views.py에서 생성한 함수를 urls.py에 등록하여 접근할 수 있도록 하자. 주소창에 url을 통해 접속해 결과를 확인하자 Path 변수와 get()의 활용 저번 포스트에서 Path 변수를 통해 값을 받아올 수 있었다. 그리고 get()은 objects의 메소드로 테이블에서 id 기준으로 원하는 값만 조회할 수 있다. 우선 views.py 에서 P..

Model 설정 확인하기 Model은 쿼리를 사용하지 않고 테이블을 핸들링할 수 있다. 그러기 위해선 현재 장고가 어떤 DB를 사용하고 있는지 파악해야한다. 프로젝트 폴더 아래에 settings.py에서 DATABASES 를 확인하자. Django의 기본 데이터베이스는 sqlite이다. Django와 호환되는 다른 데이터베이스를 알고 싶다면 위 주석에 있는 링크를 찾아가보자 또한 INSTALLED_APPS 에도 앱이 추가되어 있는지 확인하자. Model 생성 모델은 앱 폴더 아래 models.py에서 아래와 같이작성하자. CharField 는 char형태로 250자 까지 사용 가능한 컬럼을 생성하고, TextField는 varchar형태로 제한없이 사용 가능한 컬럼을 생성한다. 컬럼을 생성하는 함수는 d..

기본적인 View 작성 View는 사용자에게 보여줄 화면에 대한 부분을 만드는 곳이다. 프로젝트 내의 앱 폴더의 views.py에 아래와 같이 작성해보자. 이제 이 View 연결된 Url에 접속하면 응답이라는 메세지가 출력될 것이다. 그렇다면 위 View에 연결된 Url을 정의 하도록 하자 이전 포스트에서 만든 앱의 urls.py에 다음과 같이 추가하자. 그리고 프로젝트의 urls에서 앱으로 연결되는 주소와 앱에서 View를 연결하는 주소를 연결하면 다음과 같은 화면이 출력된다. Path 변수 Path 변수는 URL 문자열 일부를 View 함수의 인자로 전달하기 위해 선언하는 변수이다. 이를 테스트하기 위해 아래와 같이 views.py에 함수를 만들었다. 여기서 num을 URL에서 받아 출력한다. 이 함..

설치 터미널을 열어 아래 와 같은 명령문을 입력하면 장고가 설치된다. pip install Django 장고 프로젝트 생성 터미널을 켜서 프로젝트를 생성할 폴더로 이동한다. 아래 커맨드를 입력해 프로젝트를 생성한다 django-admin startproject 프로젝트 파일로 이동해 프로젝트 생성을 확인한다. migrate 작업 python manage.py migrate 프로젝트 경로 내에서 위 커맨드를 입력한다. 장고 서버 실행 python manage.py runserver 프로젝트 경로 내에서 위 커맨드를 입력하면 장고 서버가 실행된다. 장고로 만든 결과를 확인하기 위해선 서버가 실행된 상태여야 한다. 장고 앱 생성 python manage.py startapp admin.py : 현재 앱의 모델..