카테고리 없음

[Django]튜토리얼 (2)

juice_moon 2022. 5. 1. 10:54

데이터베이스에 admin으로 정보 추가

Django는 관리자 페이지를 기본 제공해줌. 우선 관리자 계정을 만들기 위해서 커멘드 입력.

python manage.py createsuperuser

커맨드를 입력하면 User, email, password를 입력하도록 되어있음.

관리자 등록 완료 후, http://127.0.0.1:8000/admin/ 주소로 들어가면 다음과 같은 페이지를 확인할 수 있음. 

관리자 등록 때 입력했던 Username과 password를 입력하면 다음과 같은 관리자 페이지가 나타나는데, 이 페이지에서 데이터를 직접 입력이 가능.

이전에 우리가 web에서 등록했던 데이터베이스들이 보이지 않는데, 이는 우리가 admin 페이지에 이전에 만든 데이터베이스를 추가해주어야만 나타남. 따라서, web/admin.py에 Post와 Choice를 추가.

 

web/admin.py

from django.contrib import admin
from .models import Post, Choice
# Register your models here.

admin.site.register(Post)
admin.site.register(Choice)

admin에 dataset을 추가해주면 관리자 페이지에 다음과 같이 데이터베이스 모델이 추가된 모습을 확인할 수 있음. 또한 Add를 눌러서 데이터 추가 가능.

 

서버 개발자가 django shell을 이용해서 직접 데이터 추가

python manage.py shell

>>> from web.models import Choice, Post

# Make sure our __str__() addition worked.
# 커맨드로 데이터베이스에서 Post 데이터베이스를 전부 불러오기.
# 이때 데이터가 없으면 빈 리스트가 뜨게 됨.
>>> Post.objects.all()
<QuerySet []>

# 새로운 데이터 추가
>>> from django.utils import timezone
>>> q = Post(title="June practice", description="practice django" ,pub_date=timezone.now())

# 입력한 데이터를 데이터베이스에 저장
>>> q.save()

# 각 데이터들은 id 존재, 방금 저장한 데이터 id 확인.
>>> q.id
1

# 파이썬 attribute를 통해 데이터의 내용 확인.
>>> q.title
'June practice'
>>> q.description
'practice django'
>>> q.pub_date
datetime.datetime(2022, 4, 30, 22, 7, 2, 462687, tzinfo=<UTC>)

# 이전에 저장했던 내용 변경후 save()로 저장
>>> q.title = "June django practice"
>>> q.save()

# objects.all()을 통해 모든 데이터 확인.
>>> Post.objects.all()
<QuerySet [<Question:June django practice>]>

 

Model을 View를 통해 화면에 나타내기

web/views.py

from django.shortcuts import render
from django.http import HttpResponse
from .models import Post
#post글에 대한 정보를 나타내는 페이지
def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    output = ', '.join([q.title for q in latest_post_list])
    return HttpResponse(output)

#글에 대한 자세한 내용을 보여주는 페이지
def detail(request, post_id):
    return HttpResponse("You're looking at question %s." % post_id)

#글에 대한 투표수 표현 기능
def result(request, post_id):
    return HttpResponse("You're looking on the result of post %s." % post_id)    

#투표할 수 있는 기능 구현
def vote(request, post_id):
    return HttpResponse("You're voting on post %s." % post_id)

view를 작성했으면, url에 연결.

from django.urls import path

from . import views

urlpatterns = [
    # ex: /
    path('post', views.index, name='index'),
    # ex: /post_id/
    path('<int:post_id>/', views.detail, name='detail'),
    # ex: /post_id/vote/
    path('<int:post_id>/vote/', views.vote, name='vote'),
]

해당 url에 들어가서 확인해보면, 원하는 내용이 제대로 나오는 것 확인.