[Back] Django

maketheworldwiseΒ·2021λ…„ 9μ›” 26일
0
post-custom-banner

🧐 Today I Learned (TIL)

  • Django μ„€μΉ˜
  • Django 기초

1. Django μ„€μΉ˜

λ§₯μ—μ„œλŠ” python을 μ‹€ν–‰ν•˜λ©΄ 기본으둜 μ„€μΉ˜λœ 2.7 버전을 μ‹€ν–‰ν•œλ‹€. λ”°λΌμ„œ v3으둜 μ„€μΉ˜ν•΄μ£Όκ³  λ³€κ²½ν•΄μ€€λ‹€.

# python3 μ„€μΉ˜
brew install python3
echo "alias python=/usr/local/bin/python3" >> ~/.zshrc
echo "alias pip=/usr/local/bin/pip3" >> ~/.zshrc
source .zshrc

# Django μ„€μΉ˜
python -m pip install Django

2. Django 기초

Django λ¬Έμ„œμ˜ μ„€λ¬Έ μ•± μ œμž‘ νŠœν† λ¦¬μ–Όλ‘œ μ§„ν–‰ν•œλ‹€.

2-1. ν”„λ‘œμ νŠΈ 생성

ν”„λ‘œμ νŠΈλ₯Ό μƒμ„±ν–ˆμ„ λ•Œ μ—¬λŸ¬ νŒŒμΌλ“€μ΄ 생성이 λ˜λŠ”λ°, κ·Έ μ€‘μ—μ„œ κ°€μž₯ μ€‘μš”ν•˜κ²Œ λ΄μ•Όν•˜λŠ” νŒŒμΌμ€ 3κ°œμ΄λ‹€.

  • manage.py (전체적인 μž₯κ³  μ„œλ²„λ₯Ό μš΄μ˜ν•˜λŠ” main 파일)
  • settings.py (μž₯고의 λ‹€μ–‘ν•œ μ„ΈνŒ…μ΄ μž‘μ„±λœ 파일)
  • urls.py (url 처리 파일)
django-admin startproject mysite

2-2. ν”„λ‘œμ νŠΈ μ‹€ν–‰

κ°€μž₯ 기본적으둜 κ΅¬μ„±λœ ν”„λ‘œμ νŠΈλ‘œ μ‹€ν–‰ν•˜λ©΄ 기본적으둜 μ œκ³΅ν•˜λŠ” 화면을 확인할 수 μžˆλ‹€.

python manage.py runserver

2-3. λΌμš°νŒ…

νŠœν† λ¦¬μ–Όμ˜ μ§€μ‹œλŒ€λ‘œ 섀문지 앱을 λ§Œλ“€κ³ 

python manage.py startapp polls

μ½”λ“œλ₯Ό μˆ˜μ •ν•΄μ€€ λ’€ 싀행을 ν•˜λ©΄, 접속 μ‹œ mysite λ””λ ‰ν† λ¦¬μ˜ urls.py의 path('polls/', include('polls.urls')) μ½”λ“œλ₯Ό 톡해 polls λ””λ ‰ν† λ¦¬μ˜ urls.pyλ₯Ό 톡해 λΌμš°νŒ…μ΄ λ˜λŠ” 것을 확인할 수 μžˆλ‹€.

  • admin.py
    μ–΄λ“œλ―Όμš©μœΌλ‘œ μ‚¬μš©ν•˜λŠ” νŒŒμΌμ΄λ‹€.

  • models.py
    λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘κ·Όν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” νŒŒμΌμ΄λ‹€.

  • views.py
    λΉ„μ¦ˆλ‹ˆμŠ€ 둜직이 λ‹΄κ²¨μ§€λŠ” νŒŒμΌμ΄λ‹€.

2-4. λͺ¨λΈλ§

κΈ°λ³Έ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜λ“€ 쀑 λͺ‡λͺ‡μ€ μ΅œμ†Œν•œ ν•˜λ‚˜ μ΄μƒμ˜ λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ”μ„ μ‚¬μš©ν•œλ‹€. λ”°λΌμ„œ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ ν…Œμ΄λΈ”μ„ 미리 λ§Œλ“€μ–΄μ£ΌκΈ° μœ„ν•΄ migrateλͺ…령을 μ‹€ν–‰ν•΄μ€€λ‹€. (κΈ°λ³Έ λ°μ΄ν„°λ² μ΄μŠ€ SQLite μ‚¬μš©)

python manage.py migrate

models.pyλŠ” λ°μ΄ν„°λ² μ΄μŠ€μ˜ λͺ¨λΈλ§μ— μ‚¬μš©λ˜λŠ” νŒŒμΌμ΄λ‹€. λ§ˆμ°¬κ°€μ§€λ‘œ νŠœν† λ¦¬μ–Ό λŒ€λ‘œ models.py에 Question ν΄λž˜μŠ€μ™€ Choice 클래슀λ₯Ό μ •μ˜ν•΄μ£Όκ³  ν˜„μž¬ ν”„λ‘œμ νŠΈμ—κ²Œ polls 앱이 μ„€μΉ˜λ˜μ–΄ μžˆλ‹€λŠ” 것을 μ•Œλ €μ£ΌκΈ° μœ„ν•΄ settings.py νŒŒμΌμ—μ„œ INSTALLED_APPSλ₯Ό μˆ˜μ •ν•΄μ€€λ‹€.

makemigrations λͺ…λ Ήμ–΄λ₯Ό μˆ˜ν–‰ν•˜λ©΄ models.py에 μ •μ˜λœ λ‚΄μš©μ— 따라 0001_initials.py 파일이 μƒμ„±λ˜λŠ” 것을 확인할 수 μžˆλ‹€.

python manage.py makemigrations polls

0001_initials.py 파일둜 migration이 λ‚΄λΆ€μ μœΌλ‘œ μ–΄λ–€ SQL λ¬Έμž₯을 μ‹€ν–‰ν•˜λŠ”μ§€ μ‚΄νŽ΄λ³Ό 수 μžˆλ‹€.

python manage.py sqlmigrate polls 0001

λ§ˆμ§€λ§‰μœΌλ‘œ μ‰˜μ„ μ—΄μ–΄ λ°μ΄ν„°λ² μ΄μŠ€μ— 데이터λ₯Ό λ„£κ³  확인해본닀.

python manage.py migrate
python manage.py shell
>>> from polls.models import Choice, Question
>>> from django.utils import timezone
>>> q = Question(question_text="What's new?", pub_date=timezone.now())
>>> q.save()
>>> Question.objects.all()
>>> q.question_text
>>> q.question_text = 'hey'
>>> q.save()
>>> q.question_text
>>> q.pub_date
>>> Question.objects.get(pk=1)

2-3. κ΄€λ¦¬μž

DjangoλŠ” 기본적인 κ΄€λ¦¬μž νŽ˜μ΄μ§€λ₯Ό μ œκ³΅ν•΄μ€€λ‹€. http://127.0.0.1:8000/admin/λ₯Ό 톡해 κ΄€λ¦¬μž νŽ˜μ΄μ§€λ‘œ 이동할 수 μžˆλ‹€.

python manage.py createsuperuser
Username: admin
Email address: admin@example.com
Password:

python manage.py runserver

νŠœν† λ¦¬μ–Όμ²˜λŸΌ admin.py νŒŒμΌμ„ μˆ˜μ •ν•˜μ—¬ κ΄€λ¦¬μž μ‚¬μ΄νŠΈμ—μ„œ poll 앱을 λ³€κ²½κ°€λŠ₯ν•˜λ„λ‘ μ„€μ •ν•΄μ£Όλ©΄ DB에 μƒμ„±ν•œ ν…Œμ΄λΈ”μ„ μ‘°μž‘ν•  수 있게 λœλ‹€.

2-4. λ·°

λ·°λŠ” Django μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 일반적으둜 νŠΉμ • κΈ°λŠ₯κ³Ό ν…œν”Œλ¦Ώμ„ μ œκ³΅ν•˜λŠ” μ›ΉνŽ˜μ΄μ§€μ˜ ν•œ μ’…λ₯˜μ΄λ‹€. νŠœν† λ¦¬μ–ΌλŒ€λ‘œ μ§„ν–‰ν•˜κ²Œ 되면 일반 html λ¬Έμ„œμ™€λŠ” λ‹€λ₯΄κ²Œ {% %}을 μ΄μš©ν•˜μ—¬ μž‘μ„±λœ 것을 λ³Ό 수 μžˆλ‹€.

{% if latest_question_list %}
    <ul>
    {% for question in latest_question_list %}
        <li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}

νŠœν† λ¦¬μ–Όμ—μ„œλŠ” Path Variable을 μ΄μš©ν•˜μ—¬ 상세 μ‘°νšŒκ°€ κ°€λŠ₯ν•œ νŽ˜μ΄μ§€λ₯Ό κ΅¬μ„±ν•˜κ³  μ‘°νšŒκ°€ μ•ˆλ˜λŠ” λ‚΄μš©μ— λŒ€ν•΄ 404 νŽ˜μ΄μ§€λ₯Ό λ„μšΈ 수 μžˆλ„λ‘ κ΅¬μ„±ν•œλ‹€. κ·Έ μ™Έμ—λŠ” url ν•˜λ“œ μ½”λ”© μ½”λ“œλ₯Ό μ œκ±°ν•΄μ£Όκ±°λ‚˜ django.shortcutsμ—μ„œ μ œκ³΅ν•˜λŠ” ν•¨μˆ˜λ“€μ„ μ΄μš©ν•˜μ—¬ 더 κ°„νŽΈν•˜κ²Œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 방법에 λŒ€ν•΄ κΈ°μˆ λ˜μ–΄μžˆλ‹€.

<!-- ν•˜λ“œ μ½”λ”© -->
<li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>

<!-- ν•˜λ“œ μ½”λ”© 제거 -->
<li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>

2-5. 폼

νŠœν† λ¦¬μ–ΌλŒ€λ‘œ μ§„ν–‰ν•˜λ©΄ 폼에 μž…λ ₯된 κ²°κ³Όλ₯Ό DB에 λ°˜μ˜λ˜λ„λ‘ ꡬ성이 λœλ‹€.


πŸ“š μ°Έκ³ 

profile
세상을 ν˜„λͺ…ν•˜κ²Œ μ΄λŒμ–΄κ°ˆ λ‚˜μ˜ μ„±μž₯ 일기 πŸ““
post-custom-banner

0개의 λŒ“κΈ€