00-django | 02 - HTTP 요청 처리

17934 단어
00-django | 02 - HTTP 요청 처리
python
Django
Django HTTP 요청 처리
Hello 보기 함수
우선 가장 간단한 Hello World를 예로 들어django가 상술한 문제를 처리하는 메커니즘이 어떠한지 살펴보자.
URL과 보기 함수 바인딩
사용자가 서로 다른 사이트에 접근할 때, Django는 이 사이트들을 어떻게 처리하는지 알아야 한다.django의 방법은 서로 다른 사이트 주소에 대응하는 처리 함수를 urls에 쓰는 것이다.py 파일에서 사용자가 특정한 사이트에 접근할 때django는 이 파일에서 찾고, 이 사이트를 찾으면 그것과 연결된 처리 함수 (보기 함수) 를 호출합니다.다음은 구체적인 방법입니다. 우선 블로그 응용 프로그램 디렉터리에 urls를 만듭니다.py 파일, 이 때 디렉터리는 다음과 같습니다.
.
├── __init__.py
├── admin.py
├── apps.py
├── migrations
├── models.py
├── static
├── tests.py
├── urls.py #  
└── views.py

urls.pyblog\urls.py에서 다음 코드를 씁니다.

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

  1. django.urls 모듈에서 path 함수를 가져왔습니다.현재 디렉터리에서views 모듈을 가져왔습니다.바로 위view입니다.py 이 파일
  2. 웹 주소와 처리 함수의 관계를 매개 변수로 path 함수(웹 주소, 처리 함수, 처리 함수의 별명)에 전달
  3. 우리 로컬 개발 서버의 도메인 이름은http://127.0.0.1:8000, 그러면 사용자가 웹 주소를 입력할 때http://127.0.0.1:8000이후django는 먼저 프로토콜 http, 도메인 이름 127.0.0.1과 포트 번호 8000을 제거합니다. 이때 빈 문자열만 남습니다.'모드는 바로 빈 문자열과 일치합니다. 그래서 양자가 일치하면django는 대응하는views를 호출합니다.index 함수.
  4. .
    ├── Pipfile
    ├── Pipfile.lock
    ├── blog
    │   ├── __init__.py
    │   ├── settings.py
    │   ├── urls.py
    │   └── wsgi.py
    ├── db.sqlite3
    ├── firstblog
    │   ├── __init__.py
    │   ├── admin.py
    │   ├── apps.py
    │   ├── migrations
    │   ├── models.py
    │   ├── static
    │   ├── tests.py
    │   ├── urls.py #       
    │   └── views.py
    ├── manage.py

    blogproject\ ( settings.py ), urls.py , URL 。 urls.py , blog 。 blog URL , 。 。

     views.index  , views.py :

    from django.http import HttpResponse
    def index(request):
    	return HttpResponse("          !")

    WEB == http , request를 요청한 내용에 따라 해당하는 http 응답을 되돌려줍니다.이 Request는django가 봉인한 HTTP 요청입니다. 이것은 클래스 Http Request의 실례입니다.그리고 우리는 HTTP 응답을 사용자에게 직접 되돌려주었다. 이 HTTP 응답도django가 봉인해 주었다. 이것은 클래스HttpResponse의 실례이고, 단지 우리가 사용자 정의 문자열 파라미터를 전달했을 뿐이다.브라우저가 이 응답을 받은 후 페이지에 우리가 전달한 내용을 표시합니다: 나의 블로그 첫 페이지를 방문하신 것을 환영합니다!
    프로젝트 URL 구성
    앞에 urls가 세워져 있습니다.py 파일과 URL과 보기 함수 index를 연결하고 Django가 이 URL을 찾을 수 있도록 합니다.py야 돼.django 일치 URL 모드는 블로그\디렉터리 (즉 settings.py 파일이 있는 디렉터리) 의 urls입니다.py에서의, 그래서 우리는firstblog에서 응용한urls.py 파일이 blog\urls에 포함됩니다.py리로 가세요. 이 파일을 열면 다음과 같은 내용을 볼 수 있습니다.

    from django.contrib import admin
    from django.urls import path, include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', include('firstblog.urls')),
    ]

     include 함수를 이 함수를 이용하여firstblog에 적용한urls.py 파일이 포함되어 있습니다.이외에include 앞에 '이 하나 더 있습니다. 이것은 빈 문자열입니다.여기도 다른 문자열을 쓸 수 있습니다.django는 이 문자열과 뒤에include의urls를 사용합니다.py 파일의 URL 결합예를 들어 만약에 우리가 여기에서'firstblog/'로 바꾸고 우리는firstblog\urls에 있다.py에 쓰인 URL은 ', 즉 빈 문자열입니다.그러면 django가 최종적으로 일치하는 것은firstblog/에 빈 문자열, 즉firstblog/이다.

    .
    ├── Pipfile
    ├── Pipfile.lock
    ├── blog
    │   ├── __init__.py
    │   ├── settings.py
    │   ├── urls.py #    
    │   └── wsgi.py
    ├── db.sqlite3
    ├── firstblog
    │   ├── __init__.py
    │   ├── admin.py
    │   ├── apps.py
    │   ├── migrations
    │   ├── models.py
    │   ├── static
    │   ├── tests.py
    │   ├── urls.py
    │   └── views.py
    ├── manage.py

     pipenv run python manage.py runserver, 브라우저에 개발 서버의 주소를 입력http://127.0.0.1:8000/,django가 되돌아오는 내용을 볼 수 있습니다.
    나의 블로그 첫 페이지를 방문하신 것을 환영합니다!
    django 템플릿 시스템 사용
    HTTP 요청을 처리하고 HTTP 응답을 반환하는 보기 함수를 작성한 다음 보기 함수를 해당 URL에 바인딩합니다.이것이 바로 Django가 HTTP를 처리하는 프로세스입니다.
    하지만 매번 Http Response에 큰 부분을 전달할 수는 없습니다.django는 이 문제에 대해 우리에게 좋은 해결 방안을 제공했는데 그것이 바로 템플릿 시스템이라고 한다.django는 우리에게 큰 텍스트를 파일에 쓰라고 했다. 그리고 django는 스스로 이 파일을 읽고 읽은 내용을 Http Response에 전달할 것이다.
    템플릿 추가
    우선 프로젝트 루트 디렉터리 (즉manage.py 파일이 있는 디렉터리) 에templates라는 폴더를 만들어서 템플릿을 저장합니다.그리고templates\디렉터리에 블로그라는 폴더를 만들어서 블로그 응용 프로그램과 관련된 템플릿을 저장합니다.templates\blog 디렉토리에 index라는 이름을 만듭니다.html 파일, 이때 당신의 디렉터리 구조는 다음과 같아야 합니다.

    .
    ├── Pipfile
    ├── Pipfile.lock
    ├── blog
    ├── db.sqlite3
    ├── firstblog
    ├── manage.py
    └── templates
        └── blog
            └── index.html

    index.html에 기록된 내용:

    
    <html lang="en">
        <head>
     		<meta charset="UTF-8">
     		<title>{{ title }}title>
        head>
        <body>
      		<h1>{{ welcome }}h1>
        body>
    html>

    {{ }}에 싸인 변수를 템플릿 변수라고 한다.django는 이 템플릿을 렌더링할 때 우리가 템플릿에 전달한 변수에 따라 이 변수를 바꿉니다.최종적으로 템플릿에 표시되는 값은 우리가 전달하는 값입니다.
    템플릿을 다 썼으니,django에게 템플릿을 어디서 찾는지 알려주고,settings에서.py 파일에 템플릿 파일이 있는 경로를 설정합니다.settings에서.py에서 TEMPLATES 옵션을 찾았습니다. 이 옵션의 내용은 다음과 같습니다.

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR, 'templates')], #     
            'APP_DIRS': True,
            'OPTIONS': {

     DIRS는 템플릿을 설정하는 경로로 []에 os를 씁니다.path.join(BASE_DIR, 'templates')
    여기 BASEDIR는 settings입니다.py는 설정 시작에 정의되어 있으며 프로젝트 루트 찾기 경로를 기록합니다.이 디렉터리에 템플릿 파일이 있는 디렉터리templates\가 있어서 os를 사용합니다.path.join은 이 두 경로를 연결하여 완전한 템플릿 경로를 구성한다.django는 이 경로 아래로 가서 우리의 템플릿을 찾는 것을 알 수 있다.보기 함수view.py는 다음과 같이 변경할 수 있습니다.

    from django.shortcuts import render
    def index(request):
        return render(request, 'blog/index.html', context={
            'title': '      ',
            'welcome': '          '
        })

    django  render 함수.이 함수는 우리가 전달한 매개 변수에 따라 HttpResponse를 구성합니다.우리는 먼저 HTTP 요청(request)을 전송한 다음에render는 두 번째 매개 변수의 값에 따라blog/index를 사용합니다.html에서 이 템플릿 파일을 찾아서 템플릿의 내용을 읽습니다.다음에render는 우리가 전송한context 매개 변수의 값에 따라 템플릿의 변수를 우리가 전달하는 변수의 값으로 바꾸었고 {{title}}은context 사전의title에 대응하는 값으로 바꾸었고, 같은 이치 {{{{welcome}}도 상응하는 값으로 바꾸었다.최종적으로 HTML 템플릿의 내용 문자열은 Http Response 대상에게 전달되고 브라우저에 되돌아옵니다. (django는render 함수에서 이 과정을 은밀하게 도와줍니다.) 그러면 사용자의 브라우저에 HTML 템플릿의 내용이 표시됩니다.
    References
    [1] HelloGitHub-Team 웨어하우스:https://github.com/HelloGitHub-Team/HelloDjango-blog-tutorial https://mp.weixin.qq.com/s/A9RHHm6wRDsMzbMU9oShyQ

좋은 웹페이지 즐겨찾기