[ django] Form & Data / Model / Migrations / QuerySet API / Admin Site

sun1Β·2023λ…„ 3μ›” 23일
0

web

λͺ©λ‘ 보기
5/5
post-thumbnail

πŸš€ Form & Data


πŸ“Œ HTML form element

  • μ›Ήμ—μ„œ μ‚¬μš©μž 정보λ₯Ό μž…λ ₯ν•˜λŠ” 방식 ( text, button, submit λ“± ) 을 μ œκ³΅ν•˜κ³  , μ‚¬μš©μžλ‘œλΆ€ν„° ν• λ‹Ήλœ 데이터λ₯Ό μ„œλ²„λ‘œ 전솑

  • 핡심속성

    데이터λ₯Ό μ–΄λ””λ‘œ action μ–΄λ–€ 방식 method 으둜 보낼지

    • action : μž…λ ₯ 데이터가 전솑될 URL 을 지정 πŸ‘‰ 속성 지정 μ•ˆν•  μ‹œ λ°μ΄ν„°λŠ” ν˜„μž¬ form 이 μžˆλŠ” νŽ˜μ΄μ§€μ˜ URL 둜 보내짐

    • method : 데이터λ₯Ό μ–΄λ–»κ²Œ 보낼 것이지 μ •μ˜ πŸ‘‰ GET / POST - 2가지 λ°©λ²•μœΌλ‘œ 전솑 κ°€λŠ₯


πŸ“Œ HTML input element

  • μ‚¬μš©μžλ‘œλΆ€ν„° 데이터λ₯Ό μž…λ ₯ λ°›κΈ° μœ„ν•΄ μ‚¬μš©

  • type 에 따라 λ™μž‘ 방식이 달라진닀. πŸ‘‰μ§€μ •ν•˜μ§€ μ•Šμ€ 경우 기본값은 text

  • form 을 톡해 데이터λ₯Ό 제좜 μ‹œ name 속성에 μ„€μ •λœ 값을 전솑 πŸ‘‰ name 은 key , value λŠ” value 둜 맀핑

πŸ“Œ Model

  • 데이터λ₯Ό κ΅¬μ‘°ν™”ν•˜κ³  μ‘°μž‘ν•˜κΈ° μœ„ν•œ 도ꡬ
  • λ°μ΄ν„°λ“€μ˜ ν•„μˆ˜μ μΈ ν•„λ“œλ“€κ³Ό λ™μž‘λ“€μ„ 포함
  • μ €μž₯된 λ°μ΄ν„°λ² μ΄μŠ€μ˜ ꡬ쑰
  • models.py νŒŒμΌμ— 클래슀 μž‘μ„±
  • μΌλ°˜μ μœΌλ‘œλŠ” λͺ¨λΈ 클래슀 1개 == λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ” 1개
  • 각 λͺ¨λΈμ€ django.db.models λͺ¨λ“ˆμ˜ Model 클래슀λ₯Ό 상속받아 ꡬ성됨
    클래슀 λ³€μˆ˜ == DB ν•„λ“œμ˜ 이름
    클래슀 λ³€μˆ˜ κ°’ == DB ν•„λ“œμ˜ 데이터 νƒ€μž…
  • 데이터 μœ ν˜•μ— 따라 λ‹€μ–‘ν•œ λͺ¨λΈ ν•„λ“œλ₯Ό 제곡 : μ°Έκ³  μ‚¬μ΄νŠΈ https://docs.djangoproject.com/en/3.2/ref/models/fields/


πŸš€ Migrations


λͺ¨λΈμ— 생긴 λ³€ν™”λ₯Ό μ‹€μ œ DB에 λ°˜μ˜ν•˜λŠ” 방법

βœ… λͺ¨λΈ 변경사항에 λ”°λ₯Έ μƒˆλ‘œμš΄ migration λ§Œλ“€κΈ°

$ python manage.py makemigrations

πŸ‘‰ λͺ…λ Ήμ–΄ μ‹€ν–‰ ν›„ migrations/0001_initial.py κ°€ 생성

βœ… λͺ¨λΈμ˜ 변경사항과 데이터 베이슀λ₯Ό 동기화

$ python manage.py migrate

❗ models.py μ—μ„œ 변경사항이 λ°œμƒν•˜λ©΄ migration 생성 + DB 동기화 ν•˜κΈ° !

πŸš€ QuerySet API


  • ORM : DBλŠ” SQL 만 μ•Œμ•„ 듀을 수 μžˆλŠ”λ°, SQL 을 μ‚¬μš©ν•˜μ§€ μ•Šκ³  데이터 베이슀λ₯Ό μ‘°μž‘ν•  수 있게 λ§Œλ“€μ–΄ μ£ΌλŠ” 맀개체
  • Database API : django κ°€ μ œκ³΅ν•˜λŠ” ORM 을 μ‚¬μš©ν•΄ 데이터 베이슀λ₯Ό μ‘°μž‘ν•˜λŠ” 방법 πŸ‘‰ Model 을 μ •μ˜ν•˜λ©΄ 데이터λ₯Ό λ§Œλ“€κ³  읽고 μˆ˜μ •ν•˜κ³  μ§€μšΈ 수 μžˆλŠ” ( CRUD ) API λ₯Ό 제곡
  • Query : 데이터 λ² μ΄μŠ€μ— νŠΉμ •ν•œ 데이터λ₯Ό 보여 λ‹¬λΌλŠ” μš”μ²­
  • QuerySet : 데이터 λ² μ΄μŠ€μ—κ²Œμ„œ 전달 받은 데이터 λͺ¨μŒ
  • QuerySet API : QuerySet κ³Ό μƒν˜Έμž‘μš©ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” 도ꡬ ( λ©”μ„œλ“œ, μ—°μ‚°μž λ“± )

πŸ“Œ 사전쀀비

βœ… 라이브러리 μ„€μΉ˜ 및 μ„€μ •

$ pip install ipython
$ pip install django-extensions
  • settings.py 에 'django_extensions', μΆ”κ°€ν•˜κΈ° !

βœ… νŒ¨ν‚€μ§€ λͺ©λ‘ μ—…λ°μ΄νŠΈ

$ pip freeze > requirements.txt

βœ… django shell

$ python manage.py shell

λ˜λŠ”

$ python manage.py shell_plus

πŸ“Œ CRUD

λŒ€λΆ€λΆ„μ˜ μ†Œν”„νŠΈμ›¨μ–΄κ°€ κ°€μ§€λŠ” 기본적인 데이터 처리 κΈ°λŠ₯

Create : 생성

  • 첫번째 방법
  1. article = Article()
  2. article.title = 'λ³€μˆ˜κ°’'
    article.content = 'λ³€μˆ˜κ°’' ...
  3. article.save()
  • λ‘λ²ˆμ¨° 방법
  1. article = Article(title = 'λ³€μˆ˜κ°’', content = 'λ³€μˆ˜κ°’' )
  2. article.save()
  • μ„Έλ²ˆμ¨° 방법
  1. Article.objects.create(title = 'λ³€μˆ˜κ°’', content = 'λ³€μˆ˜κ°’' )

Read : 쑰회

  • all() : 전체 데이터 쑰회
    Article.objects.all()

  • get() : 단일 데이터 쑰회
    Article.objects.get(pk=쑰회 ν•˜κ³ μžν•˜λŠ” 데이터 pk 번호)

  • filter() : μ§€μ •λœ 쑰회 맀개 λ³€μˆ˜ 와 μΌμΉ˜ν•˜λŠ” 객체λ₯Ό ν¬ν•¨ν•˜λŠ” μƒˆ QuerySet λ°˜ν™˜
    Article.objects.filter(content=쑰회 ν•˜κ³ μžν•˜λŠ” 데이터 content)
    Article.objects.filter(title=쑰회 ν•˜κ³ μžν•˜λŠ” 데이터 title)

Update : μˆ˜μ •

  1. μˆ˜μ •ν•˜κ³ μž ν•˜λŠ” article μΈμŠ€ν„΄μŠ€ 객체λ₯Ό 쑰회 ν›„ λ°˜ν™˜ 값을 μ €μž₯
    article = Article.objects.get(pk=1)
  2. μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό λ³€κ²½
    article.title='hi'
  3. μ €μž₯
    article.save()
  4. 확인
    article.title

Delete : μ‚­μ œ

  1. μ‚­μ œν•˜κ³ μž ν•˜λŠ” article μΈμŠ€ν„΄μŠ€ 객체λ₯Ό 쑰회 ν›„ λ°˜ν™˜ 값을 μ €μž₯
    article = Article.objects.get(pk=1)
  2. delete λ©”μ„œλ“œ 호좜
    article.delete()

πŸš€ Admin Site


βœ… admin 계정 생성

$ python manage.py createsuperuser

βœ… λͺ¨λΈμ„ 보기 μœ„ν•΄ admin.py에 등둝

0개의 λŒ“κΈ€