python Django Practice1

박상영·2020년 6월 6일
0

- 장고 document에서 튜토리얼chapter4 까지 진행하면서 가장 많이 작성되고 바뀌고 또 중요하게 되는 것들을 정리하고자 한다.

  • URLconf

인터넷의 모든 페이지는 고유한 URL을 가지고있어야 한다. application 은 사용자가 URL을 입력하면 어떠한 내용을 보여줘야 하는지 알고있다. django는 URLconf(URL configuration)을 사용합니다. URLconf는 URL 과 일치하는 view를 찾기위한 패턴들의 집합입니다.

장고URL은 어떻게 작동할까?


처음 Wecode/urls.py을 vim urls.py 커맨드를 입력하면 위에 사진에 내용이 이미 적용이되어있다. 그리고 그안에서 독스트링((docstring),(""", ''')) 을 확인할수있는데, 이 독스트링은 파일 제일 첫 부분, class 또는 method 윗부분에 작성해, 이들이 어떠한 일을 수행하는지 알려줍니다. 주석 이라 생각하면됩니다.

path("admin/", admin.site.urls),

관리자URL의 path가 이미 주어져 있는것을 볼수있는데, Django는 admin/ 로 시작하는 모든 URL을 view와 대조해 찾아냅니다.

polls 디렉토리에 URLconf를 생성하기위해 urls.py파일 생성

최상위URLconf에서 polls.urls module을 바라보게 설정

  • Wecode/urls.py 파일에서 django.urls.include를 import 하고, urlpatterns리스트에 include() 함수를 추가.
  • include() 함수 형식

    매개 변수
    module -- URLconf module (or module name)
    namespace (str) -- Instance namespace for the URL entries being included
    pattern_list -- Iterable of path() and/or re_path() instances.
    app_namespace (str) -- Application namespace for the URL entries being included

include() 함수는 다른URLconf 들을 참조할 수 있게 도와줍니다.
Django가 함수include()를 만나게 되면, URL의 그 시점까지 일치하는 부분을 잘라내고, 남은 문자열 부분을 후속처리를 위해 include된 URLconf로 전달합니다.
즉, polls디렉토리에서 urls라는 모듈을 찾아낼수있게 include()함수를 사용하여 참조하게 하였다.

이렇게 path() 함수에 2개의 필수 인수인 route와 view가 들어가고 2개의 선택가능한 인수 kwargs와 name 까지 모두 4개의 인수가 전달되었다.

  • path(): route
    route 는 URL 패턴을 가진 문자열입니다. 요청이 처리될때, Django는 urlpatterns의 첫 번째 패턴부터 시작하여 일치하는 pattern을 찾을때까지 요청된 URL을 각 pattern과 list 의 순서대로 비교한다

pattern들은 GET 이나 POST 의 매개변수들, 혹은 도메인 이름을 검색하지않는다.
https://www.example.com/Website/ 가 요청이 된 경우 오직 Website/ 부분만 바라본다.https://www.example.com/Website/?page=3 같은 요청에도 URLconf는 오직 Website/ 부분만 바라봅니다.

  • path() 인수: view
    Django 에서 일치하는 pattern을 찾으면, HttpRequest 객체를 첫번째 인수로 하고, 경로로 부터 capture된 값을 키워도 인수로 하여 특정한 view 함수를 호출한다.

    HttpRequest 객체

class HttpRequest:
    """가장 기본적인 http 요청"""

    # GET / POST dicts에 사용 된 인코딩. 없음은 기본 설정을 사용함을 의미합니다.
    _encoding = None
    _upload_handlers = []

    def __init__(self):
        # WARNING: "WSGIRequest" 서브 클래스는"super"를 호출하지 않습니다.
        # 만들어진 모든 변수 할당
        # "WSGIRequest.__init__()".

        self.GET = QueryDict(mutable=True)
        self.POST = QueryDict(mutable=True)
        self.COOKIES = {} 
        self.META = {}
        self.FILES = MultiValueDict()
        self.path = ''
        self.path_info = ''
        self.method = None
        self.resolver_match = None
        self.content_type = None
        self.content_params = None

    def __repr__(self):
        if self.method is None or not self.get_full_path():
            return '<%s>' % self.__class__.__name__
        return '<%s: %s %r>' % (self.__class__.__name__, self.method, self.get_full_path())
  • self.GET(HttpRequest.GET)
    주어진 모든 HTTP GET 매개 변수를 포함하는 dict()과 유사한 객체입니다.
  • self.POST(HttpRequest.POST)
    주어진 모든 HTTP POST 매개 변수를 포함하는 dict()과 유사한 객체로, 요청에 양식 데이터가 포함되어 있습니다.
  • self.COOKIES(HttpRequest.COOKIES)
    모든 쿠키를 포함하는 dict(). 키와 값은 문자열입니다.
  • self.META(HttpRequest.META)
    사용 가능한 모든 HTTP 헤더가 포함 된 dict() 입니다.
  • self.FILES(HttpRequest.FILES)
    업로드 된 모든 파일을 포함하는 dict() 과 유사한 객체입니다. FILES의 각 키는 <input type = "file"name = "">의 이름입니다. FILES의 각 값은 UploadedFile입니다.
  • self.path(HttpRequest.path)
    체계 또는 도메인을 포함하지 않고 요청 된 페이지의 전체 경로를 나타내는 문자열입니다. 예를들면, "/music/bands/the_beatles/" 와같이 나타난다
  • self.path_info(HttpRequest.path_info)
    일부 웹 서버 구성에서 호스트 이름 뒤에있는 URL 부분은 스크립트 접두사 부분과 경로 정보 부분으로 나뉩니다.
    path_info 속성은 사용중인 웹 서버에 관계없이 항상 경로의 경로 정보 부분을 포함합니다.
    경로 대신이 옵션을 사용하면 테스트 서버와 배포 서버간에 코드를보다 쉽게 이동할 수 있습니다.

application의 WSGIScriptAlias가 /minfo로 설정된 경우 path는 /minfo/music/bands/thebeatles/
path_info는 /music/bands/thebeatles/가 된다.

  • self.method(HttpReqeust.method)
if request.method == 'GET':
    do_something()
elif request.method == 'POST':
    do_something_else()

요청에 사용 된 HTTP 메소드를 나타내는 문자열입니다. 대문자로 보장됩니다.

  • self.resolver_match(HttpRequest.resolver_match) 해석 된 URL을 나타내는 ResolverMatch의 인스턴스입니다. 이 속성은 URL 확인이 수행 된 후에 만 ​​설정됩니다. 즉, 모든보기에서 사용 가능하지만 URL 확인이 실행되기 전에 실행되는 미들웨어에서는 사용할 수 없습니다 (process_view()에서 사용할수있음).
  • self.content_type(HttpRequest.content_type)
    CONTENT_TYPE 헤더에서 구문 분석 된 요청의 MIME 유형을 나타내는 문자열입니다.
  • self.content_params(HttpRequest.content_params)
    CONTENT_TYPE 헤더에 포함 된 키 / 값 매개 변수 dict() 입니다.
  • path() 인수: kwargs
    임의의 키워드 인수들은 목표한 view에 dict() 으로 전달된다.
  • path() 인수: name
    URL 에 이름을 지으면 template 를 포함한 Django 어디에서나 명확하게 참조할수 있다. 이 path를 사용하면 단 하나의 파일만 수정해도 project 내의 모든 URLpattern을 바꿀수 있도록 해준다.
profile
backend

0개의 댓글