Django Book 2.0 노트-View

35565 단어 djangoview
"D"는 발음하지 않습니다.
글의 모든 상호작용 부분은python 관리자입니다.py 셸에서 실행된,
 
MTV 모드:
데이터 구동의 웹 응용을 데이터 액세스 논리, 표현 논리와 업무 논리에 따라 구조를 구분하는 개념은 모델-View-Controller 모델(MVC)이라고 부른다.이런 모델이 Django에 나타난 것은 바로 MTV 모델이다. 데이터베이스 업무를 담당하는 모델, 페이지 표현을 담당하는 Template와 조직 업무를 담당하는 View이다.
 
Project & App
프로젝트는 전체 사이트를 만들고 실행하는 데 사용되는 모든 파일을 포함하는 폴더로 볼 수 있고 app는 프로젝트의 다음 디렉터리에 있는 여러 개의 하위 폴더로 각 app는 독립된 기능을 포함하고 apps의 전체가 전체 사이트를 구성한다.뭐, 대개'대상'과'방법'의 관계라고 볼 수 있겠죠.
프로젝트를 만들 때 명령줄을 사용할 수 있습니다:django-admin.py startproject site_name
django-admin.py는 Python 설치 디렉토리의 Sripts 폴더에 있습니다.이 명령은 실행 디렉터리에 프로젝트 관리 파일 관리자를 포함하는 폴더를 생성합니다.py와 "site name"과 이름이 같은 하위 폴더init__.py , settings.py , urls.py , wsgi.py 네 개의 프로젝트 설정 파일입니다.
  • __init__.python 이 폴더가 가방이라고 알려 주기
  • manage.py의 내용은 매우 간단하다. 그의 기능은 명령줄을 실행하는 데 전문적으로 사용되는'excute from command line(sys.argv)'이다.예를 들어'python 관리자.py startapp appname'명령으로 app를 만들 수 있습니다.그가 다른 프로필과 독립한 것은 보기 좋게 하기 위해서이다.
  • settings.py 엉망진창인 항목 설정 설정
  • urls.py는 사이트 URL과 보기(view) 간의 映射 관계를 정의하는데 어떤 주소가 어떤 페이지로 되돌아오는지 설정하는 것이다.이 파일의 주체는 urlpatterns 대상이다. 이 대상은 여러 개의 url 대상으로 구성되고 url 대상의 구조기는 두 가지 파라미터를 받아들인다. 하나는 사이트 url의 정규 표현식이고 다른 하나는 이 표현식과 일치하는 보기 대상이다.
  • wsgi.py는 서버에서 사용할 수 있는 wsgi 호출 대상을 제공합니다
  •  
    관리자를 사용합니다.py가 app를 만든 후 appname 폴더에 처음 다섯 개의 파일이 포함됩니다.inti__.py의 기능은 위와 같습니다. 기타는 다음과 같습니다.
  • admin.py는 모델을 관리 인터페이스에 등록하는 데 사용
  • models.py 본 앱의 데이터 모델 만들기
  • tests.py 단위 테스트 파일
  • views.py 정의 보기 함수
  •  
    View
    보기 함수는 프로젝트 폴더와 apps 폴더의views 파일에 포함됩니다.모든 함수는 같은 업무를 처리하고 해당하는 페이지로 되돌아갈 수 있다.
     
    URLConfs:
    '어떤 url 주소가 어떤 함수를 호출하는지' 는 프로젝트 폴더에 있는 urls 파일에 설정됩니다.urls의urlpatterns 변수는 만들 때 두 가지 주석된 예시를 가지고 patterns 대상의 표준 문법을 알립니다.
    
       
       
       
       
    urlpatterns = patterns( '' , # Examples: # url(r'^$', 'mysite.views.home', name='home'), # url(r'^blog/', include('blog.urls')), )
  • url구조기의 첫 번째 파라미터는 정규 표현식으로 url의 도메인 이름 + "/"뒷부분과 일치하는 데 사용된다.
  • 두 번째 매개 변수는 보기 함수로 형식은 일반적으로'app.views.func_함수 대상에 대한 인용이 아닌 문자열 경로를 사용하면 파일의 시작 부분에 import이 너무 많은 내용을 피할 수 있습니다.
  • 세 번째 매개 변수는 보기 함수에 전달할 수 있는 선택할 수 있는 키워드 매개 변수입니다. 사전 형식으로 제공해야 합니다. 상례에서 사용한 것은 키워드 매개 변수 형식입니다. 괜찮겠죠.

  •  
    공통 뷰 접두어
    patterns 대상의 첫 번째 매개 변수는 빈 문자열입니다. 이것은 사실 공공 보기 접두사입니다. 뒤에 있는 모든 문자열 함수 경로의 앞에 추가됩니다.
    또한 여러 개의 서로 다른 보기 접두사가 존재하는 상황에 대응하기 위해 예를 들어 모든 앱에 하나의 공공 보기 접두사를 사용하기 위해urlpatterns 대상은 스스로 추가할 수 있다(+=):
    
       
       
       
       
    urlpatterns = patterns( ' app1.views ' , url(r ' ^app1_url$ ' , ' func_in_app1 ' ) ) urlpatterns += patterns( ' app2.views ' , url(r ' ^app2_url$ ' , ' func_in_app2 ' ) )

     
    url 매개 변수
    url 매개 변수는 urlpattern이 정규 표현식의 형식으로 포획하여 보기 함수로 자동으로 전송할 수 있습니다.하위 그룹과 유사하게 캡처합니다().
    
       
       
       
       
    urlpatterns = patterns( '' , (r ' ^(\d{1,2})/$ ' , ' app.views.func ' ), )

    여기 (\d{1,2}) 는 한두 자리의 숫자와 일치하고 보기 함수에 문자열로 전송되며, 이런 매개 변수는 항상 문자열로 전송됩니다.
    또한 보기 함수에서도 매개 변수 유형 검사를 잘 해야 하며 항상 호출자가 신뢰할 수 없다고 여겨야 한다.
     
    url 명명 정규 표현식
    위치 매개변수를 캡처하는 방법() 외에도 키워드 매개변수 name=pattern(?Ppattern)을 사용하여 캡처할 수 있습니다.
    
       
       
       
       
    urlpatterns = patterns( '' , url(r ' ^articles/(?P<year>\d{4})/$ ' , views.year_archive), url(r ' ^articles/(?P<year>\d{4})/(?P<month>\d{2})/$ ' , views.month_archive), )

     
    추가 매개 변수
    앞에 쓰여 있지 않지만 url 구조기에는 선택할 수 있는 세 번째 인자인 사전 봉인된 키워드 파라미터가 있습니다.
    
       
       
       
       
    urlpatterns = patterns( '' , url(r ' ^foo/$ ' , views.foobar_view, { ' template_name ' : ' template1.html ' }), url(r ' ^bar/$ ' , views.foobar_view, { ' template_name ' : ' template2.html ' }), ) # views def foobar_view(request, template_name): m_list = MyModel.objects.filter(is_new = True) return render_to_response(template_name, { ' m_list ' : m_list})

     
    추가 매개 변수의 일반 응용 장면
    1. 포착된 URLconf 값 위조
    만약 어떤 보기 함수가 url 매개 변수를 정의했고, 완전한 매개 변수를 제공할 수 없는 url 아래에서 이 보기를 사용하고 싶다면, 추가 매개 변수를 사용하여 그것을 보완할 수 있다.
    2. 일반 뷰 작성
    계속...
    3. 우선순위 문제
    포착된 이름 그룹 변수와 추가 파라미터가 충돌할 때 추가 파라미터가 우선입니다
     
    특수 뷰
    어떤 일치 모드가 특수하고 다른 보기 함수를 호출해야 할 때, 이 특수 모드를 URLconf의 첫 번째 위치에 추가하는 방식으로 실현할 수 있습니다. 왜냐하면 Django가urlpatterns에 대한 해석이 순서이기 때문입니다.
     
    추가 URLconf(include) 포함
    위에서 언급한 urls 파일에 있는 두 개의 주석을 가진 예시 중include의 예가 있다.
    
       
       
       
       
    urlpatterns = patterns( '' , # Examples: # url(r'^$', 'mysite.views.home', name='home'), # url(r'^blog/', include('blog.urls')), )

    그의 특별한 점을 볼 수 있다. 우선 url 표현식의 끝은 $가 아니라/이다.그 다음에 보기 함수의include로 바뀌었습니다.
    이include의 역할은 다른 urls 파일을 도입하는 것입니다.또는 더 정확히 말하면, 그는 이미 일치하는 부분을 차단한 다음, 나머지 url 표현식을include가 가리키는 urls 파일에 전송해서 일치하게 할 것이다.이 기능은 공공 보기 접두사와 유사하지만, 실현하는 방식이 다르기 때문에include는 여러 위치에서 서로 다른 urls 파일을 설정해야 하는 경우나, 설정된 urls 파일을 직접 사용해야 하는 경우(예를 들어admin 페이지)에 더욱 적합하다.
    주의:include를 사용할 때 부모 URLconf에서 파라미터를 포획하면 이 파라미터는 하위 URLconf에 전송되며 하위 URLconf는 이에 대해 정확한 응답을 해야 합니다. 그렇지 않으면 파라미터 이상을 일으킬 수 있습니다.이 점은 추가 매개 변수에도 마찬가지다.
     
    보기 함수:
    보기 함수의 작업은 간단하게 말하면 HttpRequest 대상을 분석한 다음 HttpResponse 대상을 되돌려주는 것입니다.가장 간단한 보기 함수 (아무것도 하지 않음) 가 이렇게 보입니다.
    
       
       
       
       
    def foo(request): return HttpResponse( "" )

    request 대상은 항상 첫 번째 매개 변수로 전송됩니다.
     
    장식기 사용:
    대량의 보기 함수에 일부 기능이 독립된 공공 코드가 있을 때, 이 코드를 장식기 함수로 작성하고 보기 함수를 정의할 때 사용할 수 있다.예를 들어 다음 로그인 인증의 예:
    
       
       
       
       
    def requires_login(view): def new_view(request, * args, ** kwargs): if not request.user.is_authenticated(): return HttpResponseRedirect( ' /accounts/login/ ' ) return view(request, * args, ** kwargs) return new_view

     
    HttpRequest
    request 대상에 포함된 현재 요청 URL에 대한 정보:
  • request.path 도메인 이름 이외의 요청 경로입니다. "/"로 시작합니다.
  • request.get_host () 호스트 이름 (도메인 이름)
  • request.get_full_path () 도메인 이름 이외의 요청 경로, 검색 문자열 포함
  • request.is_secure()가 HTTPS를 통해 액세스하는지 여부
  •  
    request.META는 HTTP에서 요청한 헤더 정보를 포함하는 파이썬 사전입니다.안에서 흔히 볼 수 있는 키는 다음과 같다.
  • HTTP_REFERER 이전 페이지의 주소
  • HTTP_USER_AGENT 클라이언트용 브라우저
  • REMOTE_ADDR 클라이언트의 IP
  • Request를 사용해야 합니다.META.get () 방법으로 키의 값을 가져옵니다. 키가 존재하지 않을 때 발생하는 이상을 피할 수 있습니다.
     
    request에는 GET와 POST 속성도 있습니다. 그들은 모두 클래스 사전의 대상입니다. get (), keys (),values () 방법이 있습니다.
     
    Forms 라이브러리
    Form 클래스를 사용하는 일반적인 방법은 app 경로에forms를 새로 만드는 것입니다.py, 템플릿의 모든
    요소에 대응하는 클래스를 만듭니다.
    
       
       
       
       
    from django import forms class ContactForm(forms.Form): subject = forms.CharField() email = forms.EmailField(required = False) message = forms.CharField()

    여기서 required=False는 이 필드가 옵션임을 나타냅니다.
    print() 함수를 사용하면 html 형식으로 실례화된 폼 대상을 표시할 수 있으며 기본적으로 탭을 사용하지만
      과 탭으로 표시할 수 있습니다.그러나 이러한 세 가지 태그의 가장 바깥쪽에 있는 열린 닫기 태그는 컨텐트를 편집하기 위해 표시되지 않습니다.
      
         
         
         
         
      >>> from contact.forms import ContactForm >>> f = ContactForm() >>> print f < tr >< th >< label for = " id_subject " > Subject: </ label ></ th >< td >< input type = " text " name = " subject " id = " id_subject " /></ td ></ tr > < tr >< th >< label for = " id_email " > Email: </ label ></ th >< td >< input type = " text " name = " email " id = " id_email " /></ td ></ tr > < tr >< th >< label for = " id_message " > Message: </ label ></ th >< td >< input type = " text " name = " message " id = " id_message " /></ td > >>> print f.as_ul() < li >< label for = " id_subject " > Subject: </ label > < input type = " text " name = " subject " id = " id_subject " /></ li > < li >< label for = " id_email " > Email: </ label > < input type = " text " name = " email " id = " id_email " /></ li > < li >< label for = " id_message " > Message: </ label > < input type = " text " name = " message " id = " id_message " /></ li > >>> print f.as_p() < p >< label for = " id_subject " > Subject: </ label > < input type = " text " name = " subject " id = " id_subject " /></ p > < p >< label for = " id_email " > Email: </ label > < input type = " text " name = " email " id = " id_email " /></ p > < p >< label for = " id_message " > Message: </ label > < input type = " text " name = " message " id = " id_message " /></ p >

      Form 대상을 실례화할 때 대응하는 사전을 전송하면 귀속된Form 대상을 얻을 수 있습니다
      
         
         
         
         
      >>> f = ContactForm({ ' subject ' : ' Hello ' , ' email ' : ' [email protected] ' , ' message ' : ' Nice site! ' }) >>> f.is_bound True

      귀속 대상은 모두 isvalid () 방법
      
         
         
         
         
      >>> f.is_valid() True

      그에 상응하는 errors 속성도 있는데 이것은 필드 이름과 잘못된 정보에 대응하는 사전이다.
      
         
         
         
         
      >>> f = ContactForm({ ' subject ' : ' Hello ' , ' message ' : '' }) >>> f.errors { ' message ' : [u ' This field is required. ' ]}

      마지막으로 Form 대상을 연결하는 것이 유효하면 클렌징데이터 속성, cleaned데이터 사전의 값은 Python의 데이터 형식입니다.
      
         
         
         
         
      >>> f.cleaned_data { ' message ' : ' Nice site! ' , ' email ' : ' [email protected] ' , ' subject ' : ' Hello ' }

       
      보기에서 Form 사용:
      
         
         
         
         
      def contact(request): if request.method == ' POST ' : form = ContactForm(request.POST) if form.is_valid(): cd = form.cleaned_data . . . return HttpResponseRedirect( ' /contact/thanks/ ' ) else : form = ContactForm() return render_to_response( ' contact_form.html ' , { ' form ' : form})

      전체 상호작용은Form에 기반을 두고 있다.
       
      필드의 속성을 변경하려면 다음과 같이 하십시오.
      
         
         
         
         
      from django import forms class ContactForm(forms.Form): subject = forms.CharField(max_length = 100 ) email = forms.EmailField(required = False) message = forms.CharField(widget = forms.Textarea)

      옵션minlength 매개 변수도 사용할 수 있습니다.
       
      검사 규칙을 사용자 정의하려면 다음과 같이 하십시오.
      
         
         
         
         
      from django import forms class ContactForm(forms.Form): subject = forms.CharField(max_length = 100 ) email = forms.EmailField(required = False) message = forms.CharField(widget = forms.Textarea) def clean_message(self): message = self.cleaned_data[ ' message ' ] num_words = len(message.split()) if num_words < 4 : raise forms.ValidationError( " Not enough words! " ) return message

      Django의 form 시스템은 자동으로 일치하는 함수 방법을 찾습니다. 이 방법 이름은 clean 입니다.시작하고 필드 이름으로 끝냅니다.만약 이런 방법이 있다면, 그것은 검사할 때 호출될 것이다.특별히,clean메시지 () 방법은 지정한 필드의 기본 검사 논리가 실행된 후에 호출됩니다.

    좋은 웹페이지 즐겨찾기