[Django]장고 복습 1

Django 복습 1


Django

  • 장고는 파이썬으로 만들어진 무료 오픈 소스 웹 어플리케이션 프레임워크다.
  • 웹사이트를 쉽고 빠르게 개발하도록 도와준다.
  • 파이썬 웹 프레임워크에는 django, flask 등이 존재
  • django는 어떤 기능을 사용할지 모르기에 모든 기능을 포함시킨 프레임워크
  • flask는 어떤 기능을 사용할지 모르기에 최소한의 기능만을 포함시킨 프레임워크
  • 어떻게 사용하고, 왜 사용하는지는 계속 공부하며 알아봐야겠다.

가상환경

  • 가상 환경을 만들어주는 방법은 두 가지가 있다고 한다.
  • 첫 번째, venv(virtual environment)
    • python -m venv 가상환경명
    • 실행 방법 : .\가상환경명\Scripts\activate.bat
    • 사실, 이 부분은 배운 것이 아니라서 이 정도로 적고 넘어가야겠다.. :)
  • 두 번째, conda를 사용한 가상환경 구축
    • 전에 주피터 노트북을 사용하기 위해 anaconda를 설치 한 적이 있다.
    • anaconda에서는 django를 사용하기 위한 가상환경 구축을 도와주고 있다.
    • 보통 anaconda3를 설치하면 이런 경로에 설치가 되어있을 것이다.
    • C:\Users\사용자명\anaconda3
    • 환경 변수를 설정해줘야한다.
    • [내 PC] - [마우스 우클릭] - [속성] - [고급 시스템 설정] - [환경 변수] - [시스템 변수] - [새로 만들기]
    • 변수이름은 anaconda3, 변수 값은 C:\Users\사용자명\anaconda3으로 지정
    • image
    • 그리고 [시스템 변수] - [Path 선택] - [편집]
    • image
    • 이렇게 새로 만들기로 추가해준다.
    • 완료했다면 cmd 창을 킨다.
    • conda create -n 가상환경명 python=버전 을 쳐준다.
    • 뭐가 쫘르르르 뜨면 y or n 를 고르라는데 y를 눌러준다.
    • 설치가 될 것이다. 설치가 완료가 되면 가상환경을 실행하는 명령어를 입력해보자.
    • 가상환경 실행 : conda activate 가상환경명
    • 환경 설정 정보 : conda info --env
    • 나는 myweb이라는 이름으로 가상환경을 만들었고 파이썬 3.9 버전으로 만들었다.
    • conda info --env를 적어줬을 때 C:\Users\513eh\anaconda3\envs\myweb 내 경로가 나타난다.

PyCharm

  • 파이참을 이용해 장고를 익혀볼 것이다.
  • 파이참에서도 가상 환경을 잡아줘야한다.
  • 기존에 실행했던 프로젝트가 있다면 close 해준다.
  • image
  • 그러면 이런 화면이 나오는데 새로운 프로젝트를 생성해준다.
  • image
  • 그리고 프로젝트를 생성할 부분을 설정해주고, 위에서 만든 가상환경을 적용해준다.
  • 프로젝트가 생성됐다면 이제 터미널창을 열어보자.
  • image
  • 위에서 만든 myweb이라는 가상환경이 적용되어있는 것을 확인할 수 있다.
  • 여기서 가상환경을 비활성화하고 싶다면?
    • conda deactivate를 입력하면 된다.
    • 다시 가상환경을 활성화하려면 conda activate 가상환경명
  • 이제 프로젝트를 생성해보자.
  • django-admin startproject 프로젝트명을 적어주면 된다.
  • 나는 hello라는 프로젝트를 생성했다.
  • image
  • 이런식으로 프로젝트 폴더가 생성되고 manage.py가 생성된 것을 확인할 수 있다.

project 관리

  • 프로젝트를 관리하는 주요 명령어가 있다.
    • startapp : django-admin startapp 어플리케이션명
      • 프로젝트 내의 어플리케이션을 생성하는 명령어다.
    • runserver : python manage.py runserver
      • 가상환경 활성화 상태로 프로젝트 폴더로 경로를 지정 후 해당 명령을 적어주면 장고 서버가 작동된다.
    • makemigrations : python manage.py makemigrations[app_name]
      • 마이그레이션을 생성하는 명령어다.
      • 뒤에 앱이름을 입력하면 해당 app에서만 마이그레이션을 생성
      • 생략하면 전체 app에 대해서 마이그레이션을 생성
    • migrate : python manage.py migrate [app_name][migration_name]
      • 마이그레이션을 적용하는 명령어

django 개념

MTV 구조

  • image

  • MVT 구조를 하고 있음

    • Model : 데이터베이스와 연동 (ORM)
    • View : 데이터를 구성(Business Logic), 요청 받은 것을 처리해주는 곳
    • Template : 데이터를 표현(presentaion), view가 요청 받은 것을 처리하고 그것을 표현하는 곳

요청-응답 순환구조

  • image

이미지 출처 : http://www.ryannevius.com

  • 클라이언트에게 요청을 받으면 wsgi에서 인식. 그것을 url로 보내면 url에서 처리하는곳인 view로 보내준다.
  • 요청 사항이 만약 db가 필요한 상황이라면, model을 통해 db로 접근했다가 돌려받는다.
  • 그리고 template에서 요청에 대한 응답을 표현한다.
  • 그 응답을 wsgi가 인식하여 응답을 클라이언트에게 보냄

django 구조

  • 프로젝트를 생성하면 이러한 구조로 생성된다.
  • image
  • wsgi.py
    • Web Server Gateway Interface의 약자
    • 파이썬의 표준 게이트웨이 인터페이스(프로토콜)
    • Webserver(정적), WAS(동적) 통신(파일)을 지원한다.
    • Webserver(정적) : html, css, javascript, image 등
    • WAS(동적) : 요청에 따라 변하는 것이다.
    • 비동기 통신이 어렵다는 점을 보완하기 위해 asgi.py가 만들어 졌다.(장고 3.0)
  • asgi.py
    • django 3.0 버전부터 지원
    • 비동기 통신을 지원
  • settings.py
    • 프로젝트의 여러가지 설정을 담당
    • 주요 설정
      • ALLOW_HOSTS
      • INSTALLED_APPS
      • TEMPLATES
      • DATABASES
      • STATIC_URL
  • urls.py
    • 클라이언트에 의해 url로 요청이 오면 view로 어떻게 처리하고 응답할지 연결해주는 매개체
    • URLConf(Configuration)
    • url <-> function mapping (요청에 맞는 작업을 호출)
  • manage.py
    • 장고 프로젝트의 관리 파일
    • 설정을 지정
    • 동작이나 어플리케이션 추가 등

django 문법

urls.py

  • path('프로젝트명/앱명', views.앱명)
    • path 함수를 사용해 url <-> function (views.py) mapping
  • path('프로젝트명/앱명/<type:변수명>', views.앱)
    • path(<변수명>), path(<type:변수명>) 형태로 parameter 표현 가능
  • re_path(r'^앱명/', include('앱명.urls'))
    • re_path 함수를 사용해 정규식 형태로 매핑

views.py

  • 요청을 받아 하면을 구성하여 응답

    • def hello(request):
          return HttpResponse(<h1>Hello, World! </h1>)
      
  • render, redirect, HttpResponse, JsonResponse 등의 함수를 사용해 반환

    • def greetings(request, name):
          return render(request, greeting.html, {name: name})
      
  • data를 template에 전달해 화면을 구성(rendering)

    • <h1> /h1>
      

templates

image

database

  • DATABASE = {
        'default' : {
            'ENGINE' : 'django.db.backends.sqlite3',
            'NAME' : BASE_DIR / 'db.sqlite3',
        }
    }
    
  • sqlite3 / postgrsql / mysql / oracle 사용 가능

model

  • django.db.models.Model

    • 장고가 지원하는 RDMBS 추상화 API
  • class MyBoard(Model): # Table = Model class를 상속받는 class
        myname = models.CharFiled() # column = models.fieldType
    

실습

  • hello프로젝트의 hello 앱 안에 views.py를 생성

  • image

  • views.py 안에 처리내용 작성

  • from django.http import HttpResponse
      
      
    def index(request): # 요청이 오면 
        return HttpResponse("<h1>Hello, World!</h1>") # h1태그의 Hello, World!를 응답 
    
  • urls.py

  • from django.contrib import admin 
    from django.urls import path, include # 까지 기본적으로 적혀있음
    from . import views # 동일 폴더 내의 views를 불러옴
      
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', views.index), # path 쓰고 ,(콤마) 무조건 찍자!
        # 요청을 받고 경로가 ''라면 views.py의 index를 실행
    ]
    
  • 경로를 hello 앱으로 지정 : cd hello

  • python manage.py runserver : 장고 서버 실행

  • image

  • 터미널 창의 로컬 호스트주소 클릭

  • image

  • views에서 처리된 응답 확인

  • ctrl + c로 서버 종료

  • python manage.py startapp hello01로 hello01 app 생성

  • image

  • hello01 앱 밑에 views.py에 다음 내용 작성

  • from django.shortcuts import render
    from django.http import HttpResponse # 장고 기능, 요청을 Http로 응답
      
      
    # Create your views here.
    def index(request): # 요청이 들어오면 
        return HttpResponse("<h1><a href='/hello01/test'>Hello, Django</a></h1>")
    	# h1 태그로 감싼 a 태그(내용:Hello, Django)를 응답
    
  • hello01 앱 밑에 urls.py 생성 후 다음 내용 작성

  • from django.urls import path # 장고의 path기능 사용
    from . import views # 동일 폴더의 view를 불러옴
      
      
    urlpatterns=[
        path('', views.index), # 만약 주소가 //라면 views의 index 실행 
    ]
    
  • hello 앱 밑의 urls.py에 다음 내용 추가

  • path('hello01/', include('hello01.urls')), # hello01의 urls.py에 path를 먹여놔서 상위의 urls과 연동할 수 있다.
    
  • 서버 실행 : python manage.py runserver

  • 홈페이지 접속 후 경로에 /hello01/추가

  • 확인

  • image

  • a태그에 경로를 입력하지 않아 Hello,Django를 누르면 404에러가 난다.

  • image

2022

[web]jQuery 복습 3

1 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]jQuery 복습 2

13 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]jQuery 복습 1

14 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리4

5 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리3

10 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리2

7 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리1

8 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]CSS 기초 정리

11 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]HTML 기초 정리

8 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[Pandas]pandas 연습

3 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

맨 위로 이동 ↑

2021

[Python기초]module

1 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

맨 위로 이동 ↑