Django에 의한 게시판 작성(Django Girls)

12523 단어 파이썬장고

개요



여기에서는 Django Girls 튜토리얼의 내용을 요약하고,
파이썬의 객체 지향을 기반으로 코드를 작성하는 방법을 요약합니다.

실행 환경


  • macOS Big Sur
  • 파이썬 3.8.8
  • 장고 2.2.4

  • 여기서는 python, Django 등의 설치 및 실행 환경 구축에 관한 내용은 생략한다.

    MVT 모델



    먼저 이번 애플리케이션에서도 사용되고 있는 MVT 모델에 대해 설명한다.


    이름
    설명


    M (Model)
    데이터 관리

    V (View)
    통화 제어

    T (Template)
    사용자 인터페이스




    참고 자료

    1. 애플리케이션 생성


    $ django-admin startproject mysite .
    

    이 명령은 장고 프로젝트를 새로 만듭니다.
    파일 구성은 ↓와 같은 형태

  • manage.py : 사이트 관리에 도움이되는 스크립트
  • settings.py : 웹 사이트 설정 포함

  • TIME_ZONE 및 LANGUAGE_CODE를 일본으로 설정


  • 더 새로운 애플리케이션 만들기
    $ python manage.py startapp blog
    

    이렇게 하면 새 blog 디렉토리가 만들어집니다.
    응용 프로그램을 만든 후에는 setting.py에 사용할 것을 명시해야합니다.

    setting.py
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        # この文を追加する 
        'blog.apps.BlogConfig',
    ]
    

    이렇게 하면 새로 추가된 애플리케이션을 적응시킬 수 있습니다.

    2. 모델 만들기



    blog/models.py에서 모델 정의
    <코드 전체>

    models.py
    from django.conf import settings
    from django.db import models
    from django.utils import timezone
    
    
    class Post(models.Model):
        author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
        title = models.CharField(max_length=200)
        text = models.TextField()
        created_date = models.DateTimeField(default=timezone.now)
        published_date = models.DateTimeField(blank=True, null=True)
    
        def publish(self):
            self.published_date = timezone.now()
            self.save()
    
        def __str__(self):
            return self.title
    

    여기서 하나하나 설명해 나간다
    class Post(models.Model): Post 클래스의 인수에 models.Model을 취함으로써,
    이 클래스를 데이터베이스에 저장하기를 원합니다.
        author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
        title = models.CharField(max_length=200)
        text = models.TextField()
        created_date = models.DateTimeField(default=timezone.now)
        published_date = models.DateTimeField(blank=True, null=True)
    

    여기서는 각 속성을 정의합니다.
    모델에 대한 정의는 장고 문서을 참조하십시오.
    def publish(self): 블로그를 게시하는 방법

    지금까지 할 수 있다면 모델 변경 사항을 알려야합니다.
    $ python manage.py makemigrations blog
    

    이 명령을 실행하면 Post 모델이 데이터베이스에 반영됩니다.

    3. 로그인 페이지 만들기



    adimn.py
    from django.contrib import admin
    from .models import Post
    
    admin.site.register(Post)
    

    admin.site.register(Post)를 실행하여 모델 등록
    이것으로/admin에 액세스하면 로그인 페이지가 생겼습니다!
    이것으로 할 수 있습니다.

    4. URL 기능 설정



    blog/urls.py의 초기 상태

    urls.py
    """mysite URL Configuration
    
    [...]
    """
    from django.contrib import admin
    from django.urls import path
    
    urlpatterns = [
        path('admin/', admin.site.urls),
    ]
    

    이렇게하면/admin에 액세스 할 때 표시되는 view를 설정합니다.path('', include('blog.urls')), 이번에는이 문장을 urlpatterns에 추가합니다.
    이렇게하면 '/'에 액세스 할 때 blog.urls로 리디렉션됩니다.

    그런 다음 blog/urls.py라는 파일을 만듭니다 (여기로 리디렉션됨).

    urls.py
    from django.urls import path
    from . import views
    
    urlpatterns = [
        path('', views.post_list, name='post_list'),
    ]
    

    urls.py는이 거리.path('', views.post_list, name='post_list')이 문장은 '/'에 액세스했을 때 post_list라는 view를 실행한다는 의미name='post_list'는 뷰를 식별하는 데 사용되는 URL의 이름입니다.

    view 설정

    view.py
    from django.shortcuts import render
    
    def post_list(request):
        return render(request, 'blog/post_list.html', {})
    
  • 이 함수는 request를 인수에 취합니다
  • blog/post_list.html 템플릿 호출

  • 그리고, blog/template/에 template가 되는 HTML 파일을 작성하면 페이지의 작성에 성공한다

    5. 데이터를 동적으로 표시



    views.py
    from django.shortcuts import render
    from django.utils import timezone
    from .models import Post
    
    def post_list(request):
        posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
        return render(request, 'blog/post_list.html', {'posts': posts})
    
  • from .models import Post에서 모델의 Post 가져 오기
  • Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')에 저장된 데이터를 시계열 오름차순으로 게시물에 전달
  • {'posts': posts} 마지막으로 HTML에 게시물 정보 전달
  • 좋은 웹페이지 즐겨찾기