장고에서 모델 정의 (기초 기초 2)

9222 단어 파이썬장고

1 할 일



이번은, 지난번 간 Django 초기 설정+Helloworld로 만든 초기초적인 웹 어플리케이션에, 데이터베이스를 구축해 가고 싶습니다. 먼저 models.py에서 데이터베이스 형식을 설정하고 관리자 모드에서 데이터베이스에 샘플 데이터를 만듭니다. 그런 다음 데이터를 호출하여 템플릿의 HTML 파일을 사용하여 렌더링하고 표시하는 곳까지를 시도합니다. (이하 내용의 이용·실행은 자기책임으로 부탁드립니다.)

2 모델 설정(models.py)



장고 공식 레퍼런스 모델 설명 페이지 에 있는 샘플 코드를 참고로 Model(models.py)을 만들어 보겠습니다. 이 해설 페이지에 모델 작성에 있어서 필요한 것은 모두 쓰여지고 있다고 생각하므로, 여유가 있으면, 잘 읽어 봐 주세요.

models.py
from django.db import models

class Reporter(models.Model):
    full_name = models.CharField(max_length=70)

    def __str__(self):
        return self.full_name


class Article(models.Model):
    pub_date = models.DateField()
    headline = models.CharField(max_length=200)
    content = models.TextField()
    reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)

    def __str__(self):
        return self.headline

3 관리자 설정 및 샘플 데이터 생성



관리자 사이트에서 작업할 수 있도록 todo/admin.py를 다음과 같이 편집하여 모델을 등록합니다.

admin.py
from django.contrib import admin
from .models import Reporter, Article

admin.site.register(Reporter)
admin.site.register(Article)

Model이 설정되면 makemigration과 migrate를 실행합니다.
(virtual) firstapp % python3 manage.py makemigrations
Migrations for 'todo':
  todo/migrations/0001_initial.py
    - Create model Reporter
    - Create model Article

(virtual) firstapp % python3 manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, todo
Running migrations:
  Applying todo.0001_initial... OK

관리자를 설정합니다. (createsuperuser 명령으로 다음과 같이 설정합니다. ----는 각 환경에 따라 다릅니다.)
(virtual) firstapp % python3 manage.py createsuperuser
Username (leave blank to use '----'):     
Email address: -----
Password: 
Password (again): 
Superuser created successfully.

Runserver를 사용하여 127.0.0.1:8000/admin/에 액세스하십시오. 관리자명, 설정한 패스워드로 로그인을 하면, 모델이 반영되고 있을 것이므로, 샘플 데이터를 만들어 보겠습니다. 예를 들어, 다음과 같은 데이터를 적당하게 만들어 Save합니다.



4. 샘플 데이터를 호출, 렌더링 및 출력



웹사이트의 외형을 만드는 프로그램은 views.py에 작성됩니다. 마지막으로 만든 프로그램에 modeltest라는 새 함수를 정의합니다. object를 모두 취득하는 경우에는, object.all()를 사용합니다. (여기서 특정 object를 선택적으로 꺼내고 싶은 경우에는 object_pickup = Article.objects.get(headline='---')와 같은 형태로 추출할 수도 있습니다.)

views.py
from django.http.response import HttpResponseNotAllowed
from django.shortcuts import render
from .models import Reporter, Article

def hello(request):
    hw = 'Hello World!'
    return render(request, 'base.html', {'object':hw})

def modeltest(request):
    object_list = Article.objects.all()
    return render(request, 'modeltest.html', {'object_list':object_list})

modeltest.html을 다음과 같이 편집합니다. for 루프가 html에서 사용할 수있게되는 것은 웹 응용 프로그램의 묘미입니다.

modeltest.html
object_list:{{object_list}}

{% for item in object_list %}
  <li>item:{{item}}</li>
  <li>item.pub_date:{{item.pub_date}}</li>
  <li>item.headline:{{item.headline}}</li>
  <li>item.content:{{item.content}}</li>
  <li>item.reporter:{{item.reporter}} </li>
{% endfor %}


todo/urls.py의 경우 modeltest에 액세스 할 때 views.py의 modeltest 함수가 호출되도록 다음과 같이 편집하십시오.

urls.py
from django.urls import path
from .views import hello, modeltest

urlpatterns = [
    path('hello/', hello, name='hello'),
    path('modeltest/', modeltest, name = 'modeltest'),
]


이제 준비가 되었습니다!
127.0.0.1:8000/modeltest/로 이동하면 다음 웹사이트가 표시됩니다. 방금 관리자 사이트에서 만든 데이터가 호출되어 표시되는지 확인할 수 있습니다.
<QuerySet [<Article: テスト>]>
item:テスト
item.pub_date:July 25, 2021
item.headline:テスト
item.content:これはテストです。
item.reporter:投稿者1

좋은 웹페이지 즐겨찾기