TIL no 27 Django basic 2

백선호·2021년 7월 14일
0

TIL

목록 보기
25/39
post-thumbnail

1. url mapping

Django basic 1에서 사용했던 프로젝트를 그대로 사용할 것이다. basic 1에서도 동일하게 url mapping을 했지만 좀 더 많은 view 작성해서 url과 mapping 해볼 것이다.

- 다중 View 만들기

일단 polls/views.py에 메서드를 추가해본다.

#polls/views.py

  from django.shortcuts import render
  from django.http import HttpResponse
    
  def index(request):
      return HttpResponse("Hello world.")
  
  def select(request):
      message = '수 하나를 입력해주세요.'
      return HttpResponse(message)
  
  def result(request):
      message = '추첨 결과입니다.'
      return HttpResponse(message)

polls/urls.py 새로 추가된 메서드를 연결시켜준다.

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('select/', views.select, name='select'),
    path('result/', views.result, name='result'),
]

$python manage.py runserver를 통해
http://127.0.0.1:8000/select/
http://127.0.0.1:8000/result/
주소창에 위 주소를 입력해보면 작성된 코드가 잘 작동되는 학인할 수 있다.

2. path parameter

path 안에 있는 parameter이다. 이런 parameter의 종류는 int , string, slug이다.
예를 들어 위 코드 카페의 20번째 커피의 디테일에 해당하는 url www.wecode_cafe.com/coffee/20/detail를 방문한다고 했을 때 숫자 20까지 이와 같이 url에 변수가 변수가 넣어져 있는 경우 직접 url maping을 하지 않고 path parameter를 사용하여 더 간결하게 구현할 수 있다.

urlpatterns = [
     path('', views.index, name='index'),
     path('select/<int:number>/', views.select, name='select'),
     path('result/', views.result, name='result'),
 ]

<int:number>는 select/숫자(정수) 라는 형태이다.

def select(request, number):
     message = '수 하나를 입력해주세요.'
     return HttpResponse(message)

path에 연결되어있는 views에 select메서드에 인자로 넘겨준다.

3. model

모델은 정보들을 저장하기 위해 사용하는 개념이다. 데이터 베이스가 알아들을수 있도록 변수를 지정해서 데이터 베이스와 연동하여 데이터를 처리한다.

- models.py

새로운 second를 만들고 setting.py에서 second를 추가하고, url maping까지 완료한다.

#second/models.py

from django.db import models

class Post(models.Model): # Post 라는 게시글을 나타내는 모델을 정의
    title = models.CharField(max_length=30)  # 30자 이하의 문자열
    content = models.TextField()  # 긴 문자열

    created_at = models.DateTimeField(auto_now_add=True)  # 글 작성 시 (이 모델의 데이터(레코드) 저장 시) 생성 시각
    updated_at = models.DateTimeField(auto_now=True)  # 저장된 레코드 수정 시 수정 시각

    # num_stars = models.IntegerField()  # 숫자 필드는 이렇게 선언한다.
    

데이터 베이스와 모델의 연동을 위해 데이터 베이스가 해석할 수 있도록 post라는 모델의 특성을 만들어준다. 상위 코드는 title, content, created_at가 있다.

- makemigrations

$python manage.py makemigrations second를 입력하면 데이터 베이스와 연동되기 직전의 상태이다.

- migrate

$python manage.py migrate second를 입력하여 작성해 놓은 models.py와 데이터 베이스를 연동시킨다.

4. shell

Shell을 이용하면 shell에서 바로 Django 명령어를 사용해서 data를 다룰 수 있다.

$ python manage.py shell을 입력해서 Django shell을 불러온다.

from second.models import Post #model 가져오기
post = Post.objects.create(title='this is title', content='this is content') #입력
post.save() #저장
q.title #this is title
q.content #this is content

상위 코드는 shell 사용 방법이다.

profile
baik9261@gmail.com

0개의 댓글