Django 1

·2022년 9월 21일
0

TIL

목록 보기
12/46

Python의 Web Framework

웹 프레임워크

⭐ 프레임워크는 개발을 도와주는 하나의 틀

  • 웹 프레임워크 종류
    1) 최소한의 기능만 제공하는 형태: 서버를 만들기 위한 최소한의 기능들만 제공하는 철학을 가지고 있는 프레임워크
    ex) flask, pyramid

2) 이미 많은 기능들을 제공하고 있는 형태: 웹서비스에 공통적으로 필요한 부분들이 미리 구현되어 있음

Django

장고의 MVT 패턴

장고가 일하는 방식

  • M(Model): 데이터베이스의 모델(ORM), 저장되고 사용되는 데이터의 형태
  • T(Template): 사용자에게 보여지는 부분, 화면
  • V(View): 실질적으로 프로그램이 동작하는 부분, URL을 요청하고 응답하는 그 사이에 일어나는 '서비스'들이 존재하는 곳

즉,
서버쪽 데이터베이스를 만든느 것은 Model을 작업하는 것이고
웹 페이지 화면을 만드는 것은 Template를 작업하는 것이고
템플릿에서 서버에 일을 시키는 건 View를 작업하는 것

  • URL conf


1. 사용자가 url 요청 ➡ 크롬/사파리 등의 인터넷 브라우저
2. mySpartaSns에 요청이 접수 ➡ settings.py가 있는 가장 처음 작성한 앱의 urls.py
3. 등록된 url 찾기 ➡ urls.py에 연결된 앱에 생성한 urls.py
4. 해당 url에 등록된 view 찾기

ORM

👉 Django의 ORM은 파이썬 데이터베이스 클래스 모델을 만들고, 만든 모델을 바탕으로 자동으로 데이터베이스를 다룰 수 있도록 돕는다. 흔히 '쿼리'(데이터베이스를 다루기 위해 사용하는 언어)라고 하는 부분들을 작성하지 않아도 된다

📒 ORM(Object Relational Mapping)는 데이터베이스를 하나의 객체(Object)로 보고 데이터베이스를 SQL언어가 아닌 클래스로 쉽게 표현 및 사용할 수 있게 한다

예)

class Post:
    id = IntegerField()
    title = CharField()
    author = CharField()
    context = TextField()
  • 장고 프로젝트 구조
INSTALLED_APPS - 장고에 설치 된 앱들
MIDDLEWARE - 사용자 요청/응답 사이에서 작동하는 시스템들
TEMPLATES - 나의 html파일을 자동으로 인식
DATABASES - 내가 사용할 데이터베이스 연동 설정
AUTH_PASSWORD_VALIDATORS - 패스워드 보안 수준 검증
LANGUAGE_CODE - 화면에 어떤 언어를 보여줄것인지
TIME_ZONE - 우리가 어떤 시간에 있는지
  • settings.py 예시)
class Post:
    id = IntegerField()
    title = CharField()
    author = CharField()
    context = TextField()
  • HttpResponse() 는 괄호 안에 있는 내용을 인터넷 창 화면에 보여주는 역할

django 모델 필드의 종류

문자열 : CharField, TextField
날짜/시간: DateTimeField, DateField, TimeField
숫자 : IntegerField, FloatField
다른 테이블과 연관을 지어 줄 때 : ForeignKey

사용 예시)

#user/models.py
from django.db import models


# Create your models here.
class UserModel(models.Model):
    class Meta:
        db_table = "my_user"

    username = models.CharField(max_length=20, null=False)
    password = models.CharField(max_length=256, null=False)
    bio = models.CharField(max_length=256, default='')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

Django 명령어

$ django-admin startapp user #user이라는 app 생성 
$ django-admin startapp tweet #tweet이라는 app 생성 
  • user: 사용자 관리(회원가입/로그인/로그아웃) 담당
  • tweet: 글 관리(글쓰기, 삭제, 수정, 댓글) 담당
python manage.py makemigrations #데이터베이스 변경을 알려주는 명령어 
python manage.py migrate #변경된 데이터베이스를 적용시켜주는 명령어 
python manage.py createsuperuser #관리자 생성 

정리

  • Django는 사용자가 URL 주소를 입력(요청)하면, View는 받은 요청을 확인하고 Model에 지시를 내리고, View는 Template에 전달하며 화면과 함께 사용자에게 전달하는 순서로 동작한다
  • project: 웹사이트를 뜻하며 하나의 프로젝트는 하나의 웹사이트를 의미한다
  • application: 의미있는 하나의 기능
  • 앱 생성: tool - run manage.py task => startapp 앱 이름 (앱 생성 후에는 setting.py에서 INSTALLED_APPS 항목에 추가한다)
  • manage.py는 application을 생성하고, 데이터베이스와 작업하며 개발 웹 서버를 시작하기 위해 사용된다
  • urls.py는 사이트의 url - view의 연결을 지정해준다. 여기에는 모든 url 매핑 코드가 포함될 수 있지만, 특정한 어플리케이션에 매핑의 일부가 할당해주는 것이 일반적
  • wsgi.py는 장고 application이 웹 서버와 연결 및 소통하는 것을 돕는다. 이것을 표준 형식(boilerpalte)으로 다뤄도 무방하다
  • init.py는 빈 파일로, 반드시 존재해야 함

0개의 댓글