Django - 뷰 레이어 - 뷰 함수 및 바로 가기

14915 단어 Django 진급python
카탈로그
  • 간단한 보기
  • 다양한 오류 페이지 사용자 정의
  • 비동기식
  • 내장된 바로 가기 방법
  • render()
  • redirect()
  • get_object_or_404()
  • get_list_or_404()

  • 보기 장식기
  • require_http_methods()

  • 서버() 보기
  • 간단한 뷰
    현재 날짜와 시간을 HTML 문서로 되돌려줍니다.
    from django.http import HttpResponse
    import datetime
    
    def current_time(request):
    	now = datetime.datetime.now()
    	html = '

    It is now %s.

    '
    % now return HttpResponse(html)
  • 먼저 django.http 모듈에서 HttpResponse 클래스와 파이톤datetime 라이브러리
  • 를 가져왔습니다.
  • 그리고 current_time 보기 함수 정의
  • 모든 보기 함수는 HttpRequest 대상을 첫 번째 위치 매개 변수로 받아들여 일반적으로 request라고 부른다.
  • 이 보기는 생성된 HTML 페이지를 포함하는 HttpResponse 대상을 되돌려줍니다.

  • 다양한 오류 페이지 사용자 정의
    먼저 루트 URLconf에 오류 페이지의 항목을 추가합니다.
    from django.contrib import admin
    from django.urls import path
    from app import views
    
    ...
    
    #      
    handler400 = views.bad_request
    handler403 = views.permission_denied
    handler404 = views.page_not_found
    handler500 = views.error
    

    app/views.py
    from django.shortcuts import render
    from django.views.decorators.csrf import requires_csrf_token
    
    @requires_csrf_token
    def bad_request(request, exception):
    	return render(request, '400.html')
    
    @requires_csrf_token
    def permission_denied(request, exception):
    	return render(request, '403.html')
    
    @requires_csrf_token
    def page_not_found(request, exception):
    	return render(request, '404.html')
    
    @requires_csrf_token
    def error(request, exception):
    	return render(request, '500.html')
    

    그리고 자신의 요구에 따라 대응하는 400403404500 네 페이지를 만듭니다.
    잘못된 뷰는 DEBUG가 False로 설정된 경우에만 자동으로 실행됩니다.
    비동기 뷰
    Django3.1 비동기 보기 함수를 지원하기 시작합니다. 비동기 보기 함수를 작성하려면 Python의 async def 키워드 문법만 사용하십시오.
    from django.http import HttpResponse
    import datetime
    
    async def current_time(request):
    	now = datetime.datetime.now()
    	html = '

    It is now %s.

    '
    % now return HttpResponse(html)

    기본 제공 바로 가기
    render()
    render(request, template_name, context=None, content_type=None, status=None, using=None)
    

    주어진 템플릿과 주어진 컨텍스트 사전을 결합하여 렌더링된 HtppResponse 객체에 필요한 매개 변수를 반환합니다.
  • request: 보기 함수 처리의 현재 요청
  • template_name: 사용할 템플릿의 전체 이름이나 템플릿 이름의 목록입니다. 목록이라면 찾을 수 있는 첫 번째 템플릿을 사용합니다.
  • 옵션 매개변수
  • context: 템플릿 상하문에 추가된 데이터 사전입니다.Python에 내장된locals () 방법을 사용하면 함수 작용 영역 내의 모든 변수를 한꺼번에 추가할 수 있습니다
  • content_type: 생성된 문서의 MIME 형식입니다. 기본값은'text/html'입니다.
  • status: 응답하는 상태 코드입니다.기본값은 200
  • using: 템플릿을 로드하는 데 사용되는 템플릿 엔진의 NAME
  • redirect()
    redirect(to, args, permanent=False, *kwargs)
    

    전달된 URL 매개 변수에 따라 Http ResponseRedirect를 되돌려줍니다
    매개변수 to는 다음과 같습니다.
  • 모델 실례: 모델의 get 를 호출합니다absolute_url() 함수, 목적 역해석 url.
  • URL의name 이름: 인수가 있을 수 있음:reverse()는 URL을 역해석하는 데 사용됩니다.
  • 절대적 또는 상대적인 URL: 그대로 방향을 바꾸는 목표 위치로 한다.

  • 예:
  • 호출 대상의 getabsolute_url () 방법으로 URL을 다시 지정합니다
  • from django.shortcuts import redirect
    
    def my_view(request):
    	obj = MyModel.objects.get(...)
    	return redirect(obj)
    
  • URL의name 이름을 전달하고 내부에서reverse() 방법을 사용하여 URL을 역해석합니다.
  • def my_view(request):
    	return redirect('index_name', foo='bar')
    

    get_object_or_404()
    get_objects_or_404(klass, args, **kwargs)
    
  • klass: 가져올 대상의 모델 클래스나Queryset 등.
  • *kwargs: 조회의 매개 변수
  • 어떤 대상을 조회하여 찾으면 다음 처리를 하고, 찾지 못하면 404로 되돌아간다
    예:
  • MyModel에서 키 1을 사용하여 객체 가져오기
  • from django.shortcuts import get_object_or_404
    
    def my_view(request):
    	return get_object_or_404(MyModel, pk=1)
    
  • QuerySet 실례를 전달할 수 있다
  • get_object_or_404(Book, title__startswith='M', pk=1)
    

    get_list_or_404()
    주어진 모델 관리자의 Filter () 결과를 되돌려주고 결과를 목록으로 비추며, 결과가 비어 있으면 Http404 이상이 팝업됩니다
    예: MyModel에서 게시된 모든 객체 가져오기
    from djang.shortcuts import get_list_or_404
    
    def my_view(request):
    	my_objects = get_list_or_404(MyModel, published=True)
    

    뷰 장식기
    require_http_methods()
    이 뷰에 대한 액세스를 제한하는 HTTP 방법
    from django.viewsdecorators.http import require_http_methods
    
    @require_http_methods(["GET", "POST"])
    def my_view(request):
    	....
    

    서버 () 보기
    사용자가 올린 사진, 파일 등을 통칭하여 MEDIA라고 한다.
    개발 과정에서 MEDIA 자원의 사용과 테스트를 편리하게 하기 위해 Django는 서버 () 보기를 내장하여 유니버설 기능을 실현했습니다.
    serve () 보기는 개발 환경에만 사용할 수 있습니다
    다음 절차를 따르십시오.
    루트urls
    from django.conf import settings
    from django.urls import re_path
    from djang.views.static import serve
    
    if setting.DEBUG:
    	urlpatterns += [
    		re_path(r'^media/(?P.*)$', serve, {
         
    			'document_root': settings.MEDIA_ROOT,
    		}),
    	]
    

    settings에 다음 설정을 추가합니다
    MEDIA_URL = '/media/'
    MEDIA_ROOT = '/media/'
    

    Django 프로젝트의 루트 디렉터리에 미디어 폴더를 새로 만들고 MEDIA 자원을 넣습니다.

    좋은 웹페이지 즐겨찾기