Django(Chapter07 양식)

8875 단어 django양식
1. HttpRequest 객체에는 현재 요청된 URL에 대한 정보가 들어 있습니다.
  
   
   
   
   
   
  
속성/메서드
설명
예를 들다.
request.path
도메인 이름 이외의 요청 경로로 시작
"/hello/"
request.get_host
호스트 이름 (예, 일반적으로 말하는 도메인 이름)
"172.0.0.1:8000"or "www.example.com"
request.get_full_path()
요청 경로, 검색 문자열을 포함할 수 있습니다
"/hello/?print=true"
request.is_secure
HTTPS를 통해 액세스하는 경우 이 메서드는 True를 반환하고 그렇지 않으면 False를 반환합니다.
True 또는 False
  
2. Request에 대한 추가 정보:
   request.META는 HTTP에서 요청한 모든 헤더 정보를 포함하는 파이썬 사전입니다.
이 사전에서 흔히 볼 수 있는 키 값 몇 개:
       HTTP_REFERER, HTTP_USER_AGENT, REMOTE_ADDR
   request.GET 및 Request.POST, 둘 다 클래스 사전 대상입니다. 그것들을 통해 접근할 수 있습니다
GET 및 POST 데이터
3.
POST 데이터는 HTML의
탭에서 제출되고 GET 데이터는 에서 제출될 수도 있고 URL의 검색 문자열 (the query string) 에서 제출될 수도 있습니다.
4. 간단한 예:
books app
4.1 모델 구축.py, 데이터베이스 구축
4.2 앱을 구축하고 settings에 추가한다.py 파일
      

        INSTALLED_APPS = (
            'mysite.books',
        )
       

4.3 템플릿의 경로를 settings에 추가합니다.py에서 설정
      

        import os
        TEMPLATE_DIRS = (
            os.path.join(os.path.dirname(__file__), 'books').replace('\\','/'),                  
        ) 
       

4.4 URL 추가
4.5 뷰 추가(views.py):
      

        from django.shortcuts import render_to_response

        def search_form(request):
            return render_to_response('search_form.html')

        from django.http import HttpResponse
        from django.shortcuts import render_to_response
        from mysite.books.models import Book

        def search(request):
            errors = []
            if 'q' in request.GET :
                q = request.GET['q']
                if not q:
                    errors.append('Enter a search term.')
                elif len(q) > 20:
                    errors.append('Please enter at most 20 characters.')
            else:
                books = Book.objects.filter(title__icontains=q)
                return render_to_response('search_results.html',{'books':books, 'query':q})

            return render_to_response('search_form.html', { 'errors': errors })

       

4.6 html 디스플레이
   search_form.html
  

    <html>
    <head>
        <title>Search</title>
    </head>

    <body>
        {% if errors %}
            <ul>
                {% for error in errors %}
                <li>{{ error }}</li>
                {% endfor %}
            </ul>
        {% endif %}
        <form action="" method="get">
            <input type="text" name="q">
            <input type="submit" value="Search">
        </form>
    </body>
    </html>
   

여기 있는 action = ""은 현재 요청과 같은 디렉터리입니다.
   search_results.html
  

    <p>You searched for:<strong>{{ query }}</strong></p>
    {% if books %}
        <p>Found {{ books|length }} book{{ books|pluralize }}.</p>
        <ul>
            {% for book in books %}
            <li>{{ book.title }}</li>
            {% endfor %}
        </ul>
    {% else %}
        <p>No books matched your search criteria.</p>
    {% endif %}
   

5. 첫 번째 Form 클래스
Django에는 form 라이브러리가 있습니다.django라고 합니다.forms
이런 종류는 몇 가지 일을 했다.
a. HTML로 직접 표시
새 contacts app를 만들고forms를 만듭니다.py, 코드는 다음과 같습니다
         

           from django import forms

           class ContactForm(forms.Form):
               subject = forms.CharField(min_length=5,max_length=100)
               email = forms.EmailField(required=False, label='Your e-mail address')
               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
          

b. 검증 제공
          >>> from contact.forms import ContactForm
          >>> f = ContactForm()
          >>> print f         
          >>> print f.as_ul()
          >>> print f.as_p()
          >>> print f['subject']
          >>> f = ContactForm({'subject':'Hello', 'email':'[email protected]', 'message':'Nice site!'})
          >>> f.is_bound
          >>> f.is_valid()
          >>> f['subject'].errors
          >>> f=ContactForm({'subject':'Hello','message':''})
          >>> f.errors
2 contacts app의views.py
    

      from django.core.mail import send_mail
      from django.shortcuts import render_to_response
      from mysite.contacts.forms import ContactForm

      def contact(request):
          if request.method == 'POST':
             form = ContactForm(request.POST)
             if form.is_valid():
                cd = form.cleaned_data
                send_mail(
                    cd['subject'],
                    cd['message'],
                    cd.get('email', '[email protected]'),
                    ['[email protected]'],
                    )
            return HttpResponseRedirect('/contacts/thanks/')
          else:
              form = ContactForm(
                initial={'subject':'I love your site!'})

         return render_to_response('contact_form.html',{'form':form})
     

    
    3. html(contact_form.html)
    

     <html>                                                                
    <head>
        <title>Contact us</title>
        <style type="text/css">  
            ul.errorlist{        
                margin:0;        
                padding:0;       
            }                    
            .errorlist li {      
                background-color:red;
                color:white;         
                display:block;       
                font-size:10px;      
                margin:0 0 3px;
                padding:4px 5px;
            }
        </style>
    </head>

    <body>
        <h1>Contact us</h2>

        {% if form.errors %}
            <p style="color:red;">
            Please correct the error{{ form.errors|pluralize }} below.
            </p>
        {% endif %}

        <form action="" method="post">
            {% csrf_token %}
            <div class="field">
                {{ form.subject.errors}}
                <label for="id_subject">Subject:</label>
                {{form.subject}}
            </div>
            <div class="field">
                {{ form.email.errors }}
                <label for="id_email">Your e-mail address:</label>
                {{ form.email }}
            </div>
            <div class="field">
                {{ form.message.errors }}
                <label for="id_message">Message:</label>
                {{ form.message }}
            </div>
            <input type="submit" value="submit">
        </form>
    </body>
</html>
     

좋은 웹페이지 즐겨찾기