웹사이트 검색

Django 웹 개발용 뷰를 만드는 방법


소개

당신이 우리의 모델과 함께 따랐다면.

이 자습서에서는 웹 애플리케이션이 웹 요청을 적절하게 처리하고 필요한 웹 응답을 반환할 수 있도록 하는 Django 뷰를 생성합니다. Django 문서에 정의된 대로 웹 응답은 웹 페이지의 HTML 콘텐츠, 리디렉션 또는 HTTP 오류(예: 404)일 수 있습니다. 보기 함수에 대한 코드는 Python 경로에 있는 한 기술적으로 프로젝트의 모든 위치에 있을 수 있습니다. 그러나 이러한 보기 기능이 있는 파일의 이름을 지정하고 배치하는 몇 가지 일반적인 규칙이 있으며 이러한 관행을 따를 것입니다.

이 자습서의 단계를 완료하면 Django 블로그 사이트에서 최근 게시물을 your-IP-or-domain/post URL로 가져옵니다.

전제 조건

이 자습서는 Django 개발 시리즈의 일부이며 해당 시리즈의 연속입니다.

이 시리즈를 따르지 않은 경우 다음과 같이 가정합니다.

  • Django 버전 4 이상이 설치되어 있습니다.
  • Django 앱을 데이터베이스에 연결했습니다. 우리는 MySQL을 사용하고 있으며 Django 시리즈의 2부인 "Django 앱을 만들고 데이터베이스에 연결하는 방법\을 따라 이 연결을 달성할 수 있습니다.
  • 당신은 Unix 기반 운영 체제로 작업하고 있으며 Ubuntu 22.04 클라우드 서버가 우리가 테스트한 시스템인 것이 바람직합니다. 유사한 환경에서 Django를 설정하려면 "Ubuntu 22.04에서 Django를 설치하고 개발 환경을 설정하는 방법
  • 자습서를 참조하세요.\n
  • Django 관리 인터페이스를 설정했습니다. Django Admin 튜토리얼을 따라 이를 수행할 수 있습니다.

이 가이드는 주로 Django Views를 다루므로 설정이 다소 다르더라도 따라할 수 있습니다.

1단계 - 보기 기능 만들기

터미널 내에서 먼저 관련 디렉터리로 이동하고 Python 가상 환경을 활성화해야 합니다. 이 시리즈를 따라해 왔다면 아래 명령을 입력할 수 있습니다. 코드가 포함되어 있고 올바른 설정으로 작업하고 있는지 확인하기 위해 앱을 개발할 때 항상 Python 프로그래밍 환경을 사용하는 것이 중요합니다.

  1. cd ~/my_blog_app
  2. . env/bin/activate

이제 가상 환경이 활성화되었으므로 Python 파일을 열고 첫 번째 보기 기능을 생성할 blogsite 디렉토리로 이동하겠습니다.

  1. cd ~/my_blog_app/blog/blogsite

nano 또는 선택한 텍스트 편집기를 사용하여 편집할 views.py 파일을 엽니다.

  1. nano views.py

파일을 열면 다음과 유사한 코드로 채워져야 합니다.

from django.shortcuts import render

# Create your views here.

적절한 HttpResponse 개체를 반환할 수 있도록 render() 함수를 유지하여 템플릿과 컨텍스트를 결합할 수 있습니다. 우리가 작성하는 모든 보기에 대해 HttpResponse를 인스턴스화하고 채우고 반환해야 하므로 이 점을 명심하십시오.

다음으로 인덱스 페이지에 사용자를 환영하는 첫 번째 보기를 추가합니다. Django http 라이브러리에서 HttpResponse() 함수를 가져옵니다. 이 기능을 사용하여 웹 페이지가 요청될 때 표시할 텍스트를 전달합니다.

from django.shortcuts import render
from django.http import HttpResponse


def index(request):
    return HttpResponse('Hello, welcome to the index page.')

그런 다음 자습서 후반에 만들 개별 게시물을 표시하는 기능을 하나 더 추가합니다.

...
def individual_post(request):
    return HttpResponse('Hi, this is where an individual post will be.')

최종 views.py 파일은 이제 다음과 같습니다.

from django.http import HttpResponse
from django.shortcuts import render


def index(request):
    return HttpResponse('Hello, welcome to the index page.')

def individual_post(request):
    return HttpResponse('Hi, this is where an individual post will be.')

파일 편집이 완료되면 반드시 저장하고 종료하십시오. nano에서는 CTRLX, Y, ENTER를 차례로 누를 수 있습니다.

지금은 이러한 함수가 가리키는 지정된 URL이 없으므로 URL 구성 파일 내의 urlpatterns 블록에 추가해야 합니다. 보기가 추가되면 이 구성 파일을 통해 URL을 매핑하여 생성한 페이지를 볼 수 있도록 이동하겠습니다.

2단계 - URL을 보기에 매핑

Django를 사용하면 앱에서 사용할 자체 URL을 디자인할 수 있습니다. 이것은 일반적으로 URLconf 또는 "URL 구성\ 파일이라고 하는 파일을 사용하여 순수 Python에서 수행됩니다.

웹 페이지를 표시하려면 Django는 먼저 사용할 루트 URLconf 모듈을 결정한 다음 계속해서 urlpatterns를 찾으면 오류 처리 보기가 표시됩니다. 대신에.

이 섹션에서는 앱의 서로 다른 두 디렉토리에 있는 두 개의 서로 다른 urls.py 파일을 사용합니다.

~/my_blog_app/blog/blogsite 디렉토리에 있는 동안 편집을 위해 urls.py 파일(URLconf 파일이라고도 함)을 엽니다. 여기에서 nano를 사용하여 파일을 편집합니다.

  1. nano urls.py

urlpatterns 목록을 사용하여 아래 파일과 동일하게 파일을 변경합니다.

from django.urls import path
from . import views


urlpatterns = [
    path('', views.index, name='index'),
    path('post/', views.individual_post, name='individual_post')
]

위의 줄을 모두 추가했으면 파일을 저장하고 닫습니다.

blogsite 디렉토리의 URLconf 파일을 업데이트하면 blog 디렉토리의 URLconf에 포함하거나 그렇지 않으면 인식되지 않습니다. 설정 파일에서 ROOT_URLCONF로 설정되어 있기 때문에 이 작업을 수행해야 합니다. 이는 Django가 urlpatterns에 대한 blog 디렉토리의 URLconf를 보고 있음을 의미합니다.

blogsite URLconf를 blog URLconf에 포함하려면 해당 디렉토리로 이동해야 합니다.

  1. cd ~/my_blog_app/blog/blog

거기에 있으면 nano 또는 선택한 다른 텍스트 편집기를 사용하여 URLconf 파일을 열 수 있습니다.

  1. nano urls.py

이 파일 내에서 다음 줄을 추가하여 방금 작업한 /blogsite/urls.py 파일을 포함합니다. 두 번째 줄에 표시됩니다.

from django.contrib import admin
from django.urls import include, path


urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blogsite.urls'))
]

파일을 저장하고 닫습니다.

이제 우리가 생성한 URL로 이동하고 보기에 추가한 텍스트가 표시되는지 확인하기 위해 웹 브라우저를 열겠습니다. Django 앱을 제공하는 manage.py 파일에 액세스하려면 상위 디렉토리로 이동해야 합니다.

  1. cd ..

다음 명령을 실행하십시오. 0.0.0.0을 아래의 IP 주소로 바꿀 수 있습니다.

  1. python manage.py runserver 0.0.0.0:8000

웹 브라우저 내에서 IP 주소, 포트 8000으로 이동합니다.

your-server-ip:8000

다음과 유사한 웹 페이지를 받게 됩니다.

그런 다음 다음 URL로 이동합니다.

your-server-ip:8000/post/

여기에서 다음 웹 페이지가 표시되어야 합니다.

이제 우리는 두 개의 urls.py 파일이 작동하는 것을 확인했고, 데이터는 우리가 예상한 것을 정확하게 보여줍니다. 이 작업을 통해 실제 데이터를 블로그에 추가해 보겠습니다.

3단계 - 블로그 게시물 만들기

이제 URL 패턴과 보기가 작동하는 방식의 기본 사항을 이해했으므로 블로그 게시물을 추가하고 Python 파일에 하드코딩한 텍스트 대신 웹 페이지에 표시하도록 하겠습니다.

미리 설정한 관리자 페이지를 통해 글을 작성합니다. Django 앱을 제공하는 서버에서 웹 브라우저를 사용하여 다음 위치에 있는 관리 블로그사이트 페이지로 이동합니다.

your-server-ip:8000/admin/blogsite/

인터페이스에서 게시물 행에 있는 + 추가 링크를 클릭하여 예제 블로그 게시물로 데이터베이스 채우기를 시작합니다.

링크를 클릭하면 다음과 같은 입력 양식을 받게 됩니다.

게시물을 추가하고 싶을 때마다 이 페이지로 이동하여 추가합니다. 또는 변경 링크를 사용하여 게시물을 편집할 수 있습니다.

양식에서 다음 필드를 편집할 수 있습니다.

Field Content
Title Add your desired blog post title here, for example My First Blog Post.
Slug This refers to the part of a URL which identifies a valid web address element with human-readable keywords. This is generally derived from the title of the page, so in this case we can use my-first-blog-post.
Content This is the body of your blog post. We will just be adding Hello, World! for example purposes, but this is where you can be verbose.
Author In this field, add your relevant name or username. We will use Sammy.

테스트 목적에 맞게 블로그 게시물 양식을 작성하십시오.

예제 데이터를 페이지에 추가했으면 SAVE 버튼을 클릭합니다. 다음 확인 페이지를 받게 됩니다.

축하해요! 첫 번째 블로그 게시물을 만들었습니다!

다음으로 관리 인터페이스에 방금 입력한 데이터가 포함된 행이 MySQL 데이터베이스에 추가되었는지 확인합니다.

4단계 - 데이터베이스 데이터 표시

이 시점에서 MySQL로 이동해야 하므로 CTRL + C를 입력하여 터미널을 통해 현재 서버 프로세스를 중지한 다음 MySQL 인터프리터를 엽니다. Django 앱 데이터베이스의 사용자는 djangouser이지만 프로젝트에 적합한 사용자를 사용해야 합니다.

  1. mysql -u djangouser

MySQL 프롬프트에 있으면 blog_data 데이터베이스(또는 프로젝트에 맞는 데이터베이스)로 이동합니다.

  1. use blog_data;

그런 다음 blogsite_post 테이블의 내용을 표시합니다.

  1. select * from blogsite_post;

관리자 사용자 인터페이스에 추가한 정보를 표시해야 하는 다음과 유사한 출력이 표시됩니다.

Output
+----+--------------------+--------------------+---------------+----------------------------+--------+ | id | title | slug | content | created_on | author | +----+--------------------+--------------------+---------------+----------------------------+--------+ | 1 | My First Blog Post | my-first-blog-post | Hello, World! | 2020-05-14 00:30:03.186564 | Sammy | +----+--------------------+--------------------+---------------+----------------------------+--------+ 1 row in set (0.00 sec)

출력에서 볼 수 있듯이 추가한 게시물에 대한 데이터가 있는 행이 있습니다. 이제 이 데이터를 게시물 보기 기능에 참조해 보겠습니다. CTRL + D를 사용하여 MySQL 인터프리터를 종료하십시오.

blogsite 앱 내부의 views.py 파일 위치로 이동합니다.

  1. cd ~/my_blog_app/blog/blogsite

이제 새 데이터를 포함할 수 있도록 파일을 엽니다.

  1. nano views.py

파일을 아래 파일과 동일하게 수정합니다.

from django.shortcuts import render
from django.http import HttpResponse
from .models import Post


def index(request):
    return HttpResponse('Hello, welcome to the index page.')

def individual_post(request):
    recent_post = Post.objects.get(id__exact=1)
    return HttpResponse(recent_post.title + ': ' + recent_post.content)

위의 코드에서 Post에 대한 추가 import 문을 추가했습니다. 또한 HttpResponse에서 인용된 문자열을 제거하고 블로그 게시물의 데이터로 교체했습니다. 특정 개체에 대한 데이터를 참조하기 위해 표시하려는 개체와 연결된 블로그 게시물 ID를 사용하고 해당 ID를 recent_post라는 변수에 저장합니다. 그런 다음 필드에 마침표 구분 기호를 추가하여 해당 개체의 특정 필드를 가져올 수 있습니다.

파일을 저장하고 닫은 후 manage.py 파일 위치로 이동하여 Django 앱을 실행합니다.

  1. cd ~/my_blog_app/blog
  2. python manage.py runserver 0.0.0.0:8000

웹 브라우저에서 다음 주소로 이동합니다.

your-server-ip:8000/post/

여기에서 우리가 변경한 사항을 볼 수 있습니다. 이 페이지는 게시물에 추가한 텍스트를 표시하는 것과 유사합니다.

페이지 검사를 마쳤으면 터미널에서 CTRL + C를 눌러 프로세스 실행을 중지합니다.

프로그래밍 환경을 비활성화하려면 deactivate 명령을 입력한 다음 서버를 종료하면 됩니다.

결론

이 자습서에서는 블로그 게시물 데이터베이스에서 보기를 만들고, URL 패턴을 매핑하고, 웹 페이지에 텍스트를 표시했습니다.

다음 튜토리얼에서는 Django 템플릿을 만들기 위해 HTML을 사용하여 이것을 실제로 미학적으로 더 보기 좋게 만드는 방법을 다룰 것입니다. 지금까지 이 시리즈에서는 Django 모델과 Django 뷰를 다루었습니다. 템플릿은 Django 애플리케이션의 기반이 되는 마지막 중요한 부분입니다.