[Django] Django(4)View 베이스 함수 뷰

6309 단어 DjangoRESTFramework
View 레이어 개요
Django의 뷰 레이어는 사용자의 요청을 처리하고 응답을 반환합니다.
Django의 보기는 호출 가능한 대상이기 때문에 두 가지 방식이 있습니다. Python 함수를 통해 이루어진 함수 보기와 Python 클래스를 통해 이루어진 클래스 보기입니다.보기를 통해 사용자는 웹 요청을 받아들이고 웹 응답을 되돌려줍니다.응답은 텍스트, HTML 페이지, 이미지...
보기의 정의는 프로젝트의 임의의 모듈에 있을 수 있지만, Django는 모든 응용 프로그램의views에 적용됩니다.py는 보기를 정의하는 데 전문적으로 쓰인다.
이후 개발에서 가장 많이 사용된 것은 사실상 DjangoREST에서 제공한 보기이기 때문에 초보자에게는 이곳을 알아보기만 하면 된다.
1. 함수 보기
함수 뷰는 HttpRequest 유형의 객체를 매개 변수로 받아들이고 다음 형식으로 생성된 응답을 포함하는 HttpResponse 객체를 반환하는 Python 함수입니다.
from django.http import HttpRequest,HttpResponse

def func(request):
    ......
    return HttpResponse()

어떻게 함수를 통해 보기를 만들고 사용자가 URL을 입력할 때 페이지에 보여 줍니까?다음 두 걸음으로 끝낼 수 있다
Step1.뷰 생성하기
임의로 적용되는views.py:
from django.http import HttpRequest,HttpResponse
def helloword(request):
    return HttpResponse("Hello,Django!")

HttpRequest 객체는 요청할 때 자동으로 만들어지고 HttpResponse는 우리가 만들어야 합니다.
Step2.URL 구성
프로젝트의 프로필 (settings.py) 에서 ROOT_URLCONF 문자열은 전체 프로젝트의 루트 URL 프로필을 지정합니다. 예를 들어:
ROOT_URLCONF = 'mysite.urls'

그래서 우리도 mysite의urls에 있다.py에서 URL을 설정합니다. 이 파일에서:
"""mysite URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/2.0/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path,include
from polls import views

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

이 파일 주석에서 세 가지 방식으로 URL을 만드는 것에 대해 설명했습니다.우선views 모듈을 가져오고 urlpatterns 목록에서 path () 를 통해 URL을 지정합니다. 예를 들어:
from polls import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/', views.helloword, name='helloword'),
]

이제 브라우저에 입력 가능http://127.0.0.1:8000/hello, 이 보기에 접근할 수 있습니다.
이것은 첫 번째 방식으로 URL 설정을 하는 것이지만, 이러한 방식을 추천하지 않습니다. 모든 응용 프로그램의 URL을 루트UrlConf에 모두 설정하면 프로젝트가 점점 거대해지면서 URL이 매우 혼란스러워지기 때문입니다.루트 UrlConf에서 include() 함수를 통해 모든 응용 프로그램의 UrlConf를 도입해야 합니다. 루트 UrlConf가 일치하면 include () 를 통해 대응하는 응용 프로그램에서 일치합니다.다음과 같은 방법으로 URL을 만듭니다.
path('hello/', include('polls.urls')),

폴스를 도입했습니다.urls.py,polls.urls.py:
from . import views
path('', views.helloword),

이 두 가지 방식의 설정은 모두 원시 설정에 속하고 이후 학습에서 로터로 URL 설정을 하는데 이것도 프로젝트 개발에서 자주 사용하는 방식이다.
처리 요청 오류
Django의 경우 200을 제외한 각 응답 코드에는 다음과 같은 HttpResponse의 하위 클래스가 있습니다.
  • HttpResponsePermanentRedirect:301
  • HttpResponseNotModified:304
  • HttpResponseBadRequest:400
  • HttpResponseNotFound:404
  • HttpResponseForbidden:403
  • HttpResponseServerError:500 따라서 요청할 때 오류를 처리할 필요가 있으면 이 HttpResponse의 하위 클래스를 되돌려주면 됩니다. 예를 들어
  • def get_student(requset):
    
        try:
            stu1 = Student.objects.get(name='Little.Hong')
        except Student.DoesNotExist:
            return HttpResponseNotFound('

    Page not found

    '
    ) else: return HttpResponse("name:{0},age:{1}".format(stu1.name, stu1.age))

    또한 일반적인 404 오류의 경우 HttpResponseNotFound 이외에도 Http404 예외를 제거하여 처리할 수 있습니다.
    from .models import Student, classRoom
    from django.http import Http404
    def get_student(requset):
        try:
            stu1 = Student.objects.get(name='Little')
        except Student.DoesNotExist:
            raise Http404("page not found")
        else:
            return HttpResponse("name:{0},age:{1}".format(stu1.name, stu1.age))

    좋은 웹페이지 즐겨찾기