Django란
- Django란?
파이썬으로 만들어진 무료 오픈소스 웹 애플리케이션 프레임워크로 모델-뷰-컨트롤러 (MVC) 패턴을 따르고 있음
모델은 데이터 정보를 담고, 뷰는 어떤 데이터가 표시될 것인지 정의하며, 템플릿은 데이터가 어떻게 표시되는지를 정의 (MVT) - Django에서 템플릿을 띄워주는 과정
- Url로 요청 받아서 우리가 url을 적어준 urls.py로 가서 해당 요청에 맞는 url 분석
- 우리가 썼던 views 함수 이름을 통해 해당 url에 연결된 view로 가서 함수를 찾아 기능 수행
- view는 로직을 실행하며 데이터베이스 관련 처리를 model을 사용하여 결과 반환
- 마지막으로 vies는 최종 결과는 templates (html 파일)을 클라이언트에게 보내줌
Django 개발 환경 설정
- Django 설치
파이썬 설치 후 장고 설치 - Django 개발 환경 설정
- cmd 실행
- cd 명령어로 본인이 원하는 폴더로 이동
- django-admin startproject blog 명령어로 프로젝트 폴더 생성
- cd 명령어로 프로젝트 폴더 내부로 이동
- python manage.py migrate 명령어로 django가 사용할 데이터베이스인 Splite3 생성
- python manage.py runserver 명령어로 프로젝트 실행을 위해 서버를 켜보기
- 페이지를 추가하기 위해 python manage.py startapp main 명령어로 App 만들기
- 프로젝트에서 사용할 수 있도록 blog/blog/setting.py에서 INSTALLED_APPS을 바꾸어 등록하기
- blog/main/templates/main 폴더 생성
- blog/main/templates/main/index.html 파일 생성
- html 파일 인코딩 후 웹에 띄우기 위해 blog/main/views.py을 열어서 코드 추가
- view와 url 연결하기 위해 blog/main/urls.py를 만들어 코드 추가
- 앱의 url과 프로젝트 url 연결하기 위해 blog/blog/urls.py을 만들어 코드 추가
- python manage.py runserver 명령어 입력으로 페이지 호스팅
나만의 블로그 만들기
- 게시판 만들기
- blog/main/templates/main/blog.html 파일 생성
- html 파일 인코딩 후 웹에 띄우기 위해 blog/main/views.py을 열어서 html 템플릿을 렌더링하는 함수 코드 추가
- view와 url 연결하기 위해 blog/main/urls.py를 만들어 코드 추가
- python manage.py runserver 명령어 입력으로 페이지 호스팅
- 게시글 만들기
장고에서는 Model을 이용해 게시판에서 각각의 게시글이 데이터베이스에 어떻게 저장될 지를 결정해주므로
게시글이라는 틀을 하나 만들면 그 틀을 이용해서 여러 가지 게시글을 만들고 이를 저장함
- blog/main/models.py 파일에 제목, 작성일, 내용이 존재하는 게시글 Model 코드 구현
- 모델을 데이터베이스에 넣어 저장하기 위해
python manage.py makemigrations 명령어로 migration을 생성하고
python manage.py migrate 명령어를 통해 db에 migration을 적용하도록 함
일반적으로 models.py를 수정한 후에는 바로바로 migrate 하여
만들어진 모델을 데이터베이스에 저장하고 모델의 변경 내역을 DB 스키마에 적용 시키도록 함
한 migration 파일은 해당 migration이 생성된 시점의 모델 구조를 담으며,
적용된 파일은 의존성을 가지므로 현재 버전의 적용을 해제하기 전까지는 삭제하지 않아야 함
그 외에도 python manage.py showmigrations 명령어로 프로젝트의 migration에 대한 적용 여부를 확인할 수 있고
python manage.py sqlmigrate 명령어로 해당 migration 파일의 실행 SQL 구문을 확인할 수 있음 - 관리자가 게시글에 접근할 권한을 주기 위해 blog/main/admin.py에 코드 추가
- 장고 프로젝트의 모든 앱과 object를 관리하는 계정을 생성하기 위해 python manage.py createsuperuser 명령어 사용
- python manage.py runserver 명령어 입력으로 페이지 호스팅 후 설정한 Username과 Password 입력
- http://127.0.0.1:8000/admin에서 Post에 Add를 눌러 게시글 작성
- 게시글의 제목이 나오지 않는 것을 개선하기 위해 blog/main/models.py 코드 수정
- 게시글 목록을 페이지에 띄우기 위해 blog/main/views.py 코드를 수정하여 View가 게시글(Model)을 가져오도록 함
- 템플릿에 게시글(Model)을 붙이기 위해 blog/main/templates/main/blog.html 코드 수정
- 게시글 세부 페이지를 만들기 위해 blog/main/templates/main/posting.html 파일 생성
- 게시글 세부 페이지를 부르는 함수를 blog/main.views.py에 코드 추가
- 게시글 세부 페이지로 들어가기 위해 blog/main.urls.py에 코드 추가
- 게시판에서 게시글 제목을 클릭 시 게시글 세부 페이지로 이동하도록 blog/main/templates/main/blog.html 코드 수정
- 이미지 추가하기
- 게시글에 이미지를 추가하기 위해 blog/main/models.py에 코드 추가
- pillow 라이브러리 설치
- 모델을 수정했으므로 데이터베이스에 넣어 저장하기 위해
python manage.py makemigrations 명령어로 migration을 생성하고
python manage.py migrate 명령어를 통해 db에 migration을 적용하도록 함 - 사진이 저장된 데이터베이스 공간을 설정하기 위해 blog/blog/settings.py 파일에 코드 추가
- 장고가 파일 경로를 찾을 수 있도록 blog/main/urls.py에 코드를 추가해 이미지 경로 설정
- 게시글에 이미지를 보이게 하기 위해 blog/main/templates/main/posting.html에 코드 추가
- http://127.0.0.1:8000/admin에서 게시글을 수정하여 사진을 추가해보기
- 글쓰기 기능 만들기
admin 페이지에서 글을 작성하는 것이 아닌 글쓰기 기능을 위한 페이지 생성
- 게시글을 쓸 수 있는 페이지를 위해 blog/main/template/main/new_posting.html 생성
form 태그를 통해 내부의 정보를 한 번에 서버로 전송하며
GET 방식을 통해 원하는 데이터를 서버에 요청해서 받아오고,
POST 방식을 통해 정보를 서버에 전송하여 서버 데이터베이스에 정보를 저장
csrf(Cross-Site Request Forgery)는 사이트 간 요청 위조로 웹 어플리케이션의 취약점 중 하나이므로 장고로 이를 막음 - 글 쓰기 페이지와 view를 연결하여 html 파일 인코딩 후 웹에 띄우기 위해 blog/main/views.py에 코드 추가
사용자가 보내준 정보를 가지고 Post.objects.create 함수를 사용해 새로운 Post Model을 하나 만듦 - view와 url 연결하기 위해 blog/main/urls.py에 코드 추가
- 게시판 페이지에 글 쓰기 버튼을 추가하기 위해 blog/main/templates/main/blog.html에 코드 작성
- 게시글을 쓸 수 있는 페이지를 위해 blog/main/template/main/new_posting.html 생성
- 글삭제 기능 만들기
- 게시글을 삭제할 수 있는 페이지를 위해 blog/main/template/main/delete_posting.html 생성
- 삭제 버튼을 누르면 글이 삭제되도록 view를 구현하기 위해 blog/main/views.py에 코드 추가
- view와 url 연결하기 위해 blog/main/urls.py에 코드 추가
- 게시글 세부 페이지에 글 삭제 버튼을 추가하기 위해 blog/main/templates/main/blog.html에 코드 작성
해당 글의 pk를 받는 삭제 페이지로 이동됨
- 게시글을 삭제할 수 있는 페이지를 위해 blog/main/template/main/delete_posting.html 생성
과제
- 최종 결과
나만의 블로그 소개하기
'Community > SOLUX' 카테고리의 다른 글
[221118] 2022 2학기 프로젝트 - 프로젝트 기획 발표회 (0) | 2022.11.18 |
---|---|
[221109] 2022 2학기 프로젝트 - 4차 회의 (0) | 2022.11.15 |
[221102] 2022 2학기 프로젝트 - 3차 회의 (0) | 2022.11.03 |
[221005] 2022 2학기 프로젝트 - 2차 회의 (0) | 2022.10.06 |
[220930] 2022 2학기 프로젝트 - 1차 회의 (0) | 2022.10.05 |