모델

  • 클래스 모델을 생성하여 자동으로 데이터 베이스를 다루도록 한다.
  • 모델에 메서드가 추가될 때는 makemigrations와 migrate를 수행할 필요가 없다. 
  • makemigrations, migrate 는 모델의 속성이 변경되었을때 실행해야 한다.

 

(admin.py)

#모델을 admin에 등록
from django.contrib import admin
#동일한 위치의 models 파일의 UserModel을 불러옴
from .models import UserModel

# UserModel을 Admin에 추가
admin.site.register(UserModel)

 

 

(settings.py)

#가장 하단에 추가


# 기본 장고의 사용자 모델을 (user앱의 UserModel)로 변경 
AUTH_USER_MODEL = 'user.UserModel'

 

 

(models.py)

from django.db import models
from django.contrib.auth.models import AbstractUser

# models.Model : 자동생성 없이 하나씩 변수를 설정
# AbstractUser : 장고에서 제공하는 기본 유저 모델
class UserModel(AbstractUser):
    #DB 테이블의 이름을 지정해주는 정보
    #데이터베이스에 정보를 넣어주는 역할
    class Meta:
        db_table = "my_user"

    #AbstractUser 사용시 아래 내용은 입력하지 않아도 됨
    #CharField, DateTimeField 어떤 형태로 DB에 들어갈지 설정
    #username = models.CharField(max_length=20, null=False)
    #password = models.CharField(max_length=256, null=False)
    #created_at = models.DateTimeField(auto_now_add=True)
    #updated_at = models.DateTimeField(auto_now=True)
    
    
    #외래키로 UserModel을 가져오면 username이 반환
    def __str__(self):
        return self.username

 

 

 

 

Django 모델 필드의 종류

  • 문자열 : CharField, TextField
  • 날짜/시간: DateTimeField, DateField, TimeField
  • 숫자 : IntegerField, FloatField
  • 외래키 : ForeignKey

 

 

 

ForeignKey (외래키)

  • 다른 모델과 연결하기 위해 사용한다.
  • on_delete=models.CASCADE는 이 답변과 연결된 상위 데이터가 삭제될 경우 하위 데이터도 함께 삭제한다는 의미이다.

 

class Product(models.Model):
    class Meta:
        db_table = "product"
    
    username = models.ForeignKey(UserModel, on_delete=models.CASCADE)
    description = models.TextField(max_length=256, default='')
    quantity = models.IntegerField(default=0)

 

 

 

 

makemigrations와 migrate 차이

    makemigrations : 모델을 생성하거나 모델에 변화가 있을 경우에 실행해야 하는 명령이

    migrate : DB 테이블 생성

 

 

 

 

 

장고 셸

    모델이 변경될 때마다 셸을 재시작해야 함

 

python manage.py shell

 

 

 

 

데이터 조회

 

filter와 get

 

# username에 고양이라는 문자열이 포함되어 있는지 검사
UserModel.objects.filter(username__contains='고양이')
UserModel.objects.get(id=1)

   

    filter : 조건에 해당하는 데이터를 모두 QuerySet으로 리턴한다.

          filter 사용법 참조 : https://docs.djangoproject.com/en/4.0/topics/db/queries/

    get : 유일성을 갖는 데이터(ex. id)를 조회할 때 사용한다. UserModel 객체를 리턴한다.

 

# Product 모델 id가 1인 데이터에 연결된 username을 가져오기
product = Product.objects.get(id=1)
product.username

# 반대로 UserModel에 연결된 product의 데이터를 가져올 수 있다.
user = UserModel.objects.get(id=5)
user.product(연결모델명)_set.all()

 

 

 

 

 

데이터 수정

# user id 2를 가져와 username을 고양이로 수정하고 저장하기
user_id = UserModel.objects.get(id=2)
user_id.username = '고양이'
user_id.save()

 

 

 

 

 

 

데이터 삭제

# id 4인 데이터를 삭제하기
user_id = UserModel.objects.get(id=4)
user_id.delete()

 

'Python > Django' 카테고리의 다른 글

05. Django 템플릿  (0) 2023.04.10
04.5 Django 관리자  (0) 2023.04.09
03. Django URL  (0) 2023.04.07
02. Django 프로젝트와 앱  (0) 2023.04.05
01. Django 기초  (0) 2023.04.05

urls.py

    url과 views.pyf를 연결(매핑)하는 역할

    *특별한 경우가 아니라면 url 끝에 슬래시( / ) 를 붙여야한다.

 

views.py

    웹에서 실행되는 다양한 함수 혹은 클래스가 담긴 파일

    

 

 

URL 분리

 

  • app 이라는 이름의 앱 안의 urls.py 파일에서 app과 관련된 url 처리를 할 수 있다.
  • path( ) 괄호 뒤에 쉼표( , ) 를 붙여야 에러를 방지할 수 있다.
#장고 프로젝트의 API 담당

from django.contrib import admin
from django.urls import path, include
# 내가 있는 폴더에서 views 파일을 가져옴
from . import views


urlpatterns = [
    path('admin/', admin.site.urls),
    #('로컬 ip 뒤에 /주소/ ', views.함수)
    path('', include('app.urls')),
    views.base_response, name='first_test'),
]

    *라우팅 : 경로를 누가 처리하는가?

'Python > Django' 카테고리의 다른 글

05. Django 템플릿  (0) 2023.04.10
04.5 Django 관리자  (0) 2023.04.09
04.Django 모델  (0) 2023.04.09
02. Django 프로젝트와 앱  (0) 2023.04.05
01. Django 기초  (0) 2023.04.05

프로젝트 

    하나의 웹 사이트라고 생각하면 된다.

 

    프로젝트 안의 기능을 담당하는 앱을 생성한다.

 

 

디렉터리 구조

 

프로젝트

    templates

    앱

venv

 

기본적으로 위와 같은 위치로 사용한다.

 

 

 

app 생성하기

django-admin startapp 앱이름

# 앱을 생성하면 함께 생성되는 기본 파일
# __init__.py
# admin.py
# migrations
# models.py
# views.py
# test.py

 

 

이외에 추가로 다음과 같은 파일을 생성할 수 있다.

  • urls.py: 앱의 URL 패턴 선언
  • forms.py: 입력 폼 선언
  • behaviors.py: 모델 믹스인 위치에 대한 옵션
  • constants.py: 앱에 쓰이는 상수 선언
  • decorators.py: 데코레이터
  • db/: 여러 프로젝트에서 용되는 커스텀 모델이나 컴포넌트
  • fields.py: 폼 필드
  • factories.py: 테스트 데이터 팩토리 파일
  • helpers.py: 뷰와 모델 파일을 가볍게 하기 위해 유틸리티 함수 선언
  • managers.py: models.py가 너무 커질 경우 커스텀 모델 매니저가 위치
  • signals.py: 커스텀 시그널
  • viewmixins.py: 뷰 모듈과 패키지를 더 가볍게하기 위해 뷰 믹스인을 이 모듈로 이전

 

 

 

vs code의 경우 파이참과 달리 아래와 같이 수정해야  templates 폴더와  app 을 사용할 수 있다.

 

settings 

#TEMPLATES 안의 DIRS를 아래와 같이 변경

'DIRS': [BASE_DIR/'templates'],

 

 

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    #추가하기
    'user'
]

 

 

'Python > Django' 카테고리의 다른 글

05. Django 템플릿  (0) 2023.04.10
04.5 Django 관리자  (0) 2023.04.09
04.Django 모델  (0) 2023.04.09
03. Django URL  (0) 2023.04.07
01. Django 기초  (0) 2023.04.05

웹 프레임워크란?

 

    웹 프레임워크는 웹 프로그램을 만들 때 필요한 여러가지 기능을 이미 가지고 있다. 따라서 구현하기 어려운거나 번거로운 기능들도 쉽고 빠르게 만들 수 있도록 도와준다.

 

 

 

Flask와 Django

Flask, Pyramind Django
DB, 로그인등의 암호화, 관리자툴 제공  DB, 로그인 등의 관리가 필요
커뮤니티 문서가 구현되어 있음 관리자 페이지를 구축해야 함.
최소한의 기능만 제공 많은 기능을 제공

 

 

 

장고란?

  • 파이썬으로 만들어진 웹프레임워크
  • 데이터 베이스가 연결되면 db.sqlite3가 생성 됨
  • MVT 패턴

        M (model)

            데이터베이스의 모델(ORM)

            저장되고 사용되는 데이터의 형태

        V (view)

            View와 Model을 이어줌

            실질적으로 프로그램이 동작하는 부분

        T (template)

            사용자에게 보여지는 화면

          *ORM? 

            쿼리를 작성하지 않고 데이터를 수정, 작성, 삭제하도록 도와준다.

            개발자마다 독특한 쿼리문을 사용하는 것을 방지할 수 있다.

            클래스 모델을 만들어 모델이 자동으로 데이터 베이스를 다루도록 도와준다.

            데이터베이스 종류가 바뀌더라도 모델을 사용하므로 프로그램을 수정할 필요가 없다.

          *vs code 사용자라면 SQLite 확장 프로그램을 설치하는 것을 추천한다.

 

 

 

장고의 동작 순서

    User  →  URL →  View  →  Model(ORM)  →  DB  →  Model(ORM)  →  View →  Template  →  User

 

 

Visual Studio Code에서 장고 설치하기

python -m venv venv
venv\Script\activate
pip install django

#<프로젝트명> 바꿔서 사용
django-admin startproject <프로젝트명>  
# conf 디렉터리가 만들어짐
django-admin.py startproject conf .

# 개발환경 서버 실행 (기본 8000)
python manage.py runserver
# 포트 번호 변경시 뒤에 포트번호를 입력
python manage.py runserver 포트번호

#파이썬 최신버전 업그레이드
python -m pip install --upgrade pip

 

 

'Python > Django' 카테고리의 다른 글

05. Django 템플릿  (0) 2023.04.10
04.5 Django 관리자  (0) 2023.04.09
04.Django 모델  (0) 2023.04.09
03. Django URL  (0) 2023.04.07
02. Django 프로젝트와 앱  (0) 2023.04.05

+ Recent posts