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 프로그래밍 환경을 사용하는 것이 중요합니다.
- cd ~/my_blog_app
- . env/bin/activate
이제 가상 환경이 활성화되었으므로 Python 파일을 열고 첫 번째 보기 기능을 생성할 blogsite
디렉토리로 이동하겠습니다.
- cd ~/my_blog_app/blog/blogsite
nano 또는 선택한 텍스트 편집기를 사용하여 편집할 views.py
파일을 엽니다.
- 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에서는 CTRL
과 X
, 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를 사용하여 파일을 편집합니다.
- 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에 포함하려면 해당 디렉토리로 이동해야 합니다.
- cd ~/my_blog_app/blog/blog
거기에 있으면 nano 또는 선택한 다른 텍스트 편집기를 사용하여 URLconf 파일을 열 수 있습니다.
- 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
파일에 액세스하려면 상위 디렉토리로 이동해야 합니다.
- cd ..
다음 명령을 실행하십시오. 0.0.0.0
을 아래의 IP 주소로 바꿀 수 있습니다.
- 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
이지만 프로젝트에 적합한 사용자를 사용해야 합니다.
- mysql -u djangouser
MySQL 프롬프트에 있으면 blog_data
데이터베이스(또는 프로젝트에 맞는 데이터베이스)로 이동합니다.
- use blog_data;
그런 다음 blogsite_post
테이블의 내용을 표시합니다.
- 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
파일 위치로 이동합니다.
- cd ~/my_blog_app/blog/blogsite
이제 새 데이터를 포함할 수 있도록 파일을 엽니다.
- 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 앱을 실행합니다.
- cd ~/my_blog_app/blog
- python manage.py runserver 0.0.0.0:8000
웹 브라우저에서 다음 주소로 이동합니다.
your-server-ip:8000/post/
여기에서 우리가 변경한 사항을 볼 수 있습니다. 이 페이지는 게시물에 추가한 텍스트를 표시하는 것과 유사합니다.
페이지 검사를 마쳤으면 터미널에서 CTRL + C
를 눌러 프로세스 실행을 중지합니다.
프로그래밍 환경을 비활성화하려면 deactivate
명령을 입력한 다음 서버를 종료하면 됩니다.
결론
이 자습서에서는 블로그 게시물 데이터베이스에서 보기를 만들고, URL 패턴을 매핑하고, 웹 페이지에 텍스트를 표시했습니다.
다음 튜토리얼에서는 Django 템플릿을 만들기 위해 HTML을 사용하여 이것을 실제로 미학적으로 더 보기 좋게 만드는 방법을 다룰 것입니다. 지금까지 이 시리즈에서는 Django 모델과 Django 뷰를 다루었습니다. 템플릿은 Django 애플리케이션의 기반이 되는 마지막 중요한 부분입니다.