2012-09-14 3 views
-1

다음 코드를 더 잘 이해하려고합니다. 그것은 작업,하지만 난 그냥 완전히 여러 요소 (아래 질문에) 이해가 안 :다음 장고 코드는 어떻게 작동합니까?

from django.shortcuts import render_to_response 
from mywiki.wiki.models import Page 
from django.http import HttpResponseRedirect 
from django import forms 
import markdown 

class SearchForm(forms.Form): 
    text = forms.CharField(label='Enter search term') 

def search_page(request): 
    if request.method =='POST': 
     f = SearchForm(request.POST) 
     if not f.is_valid(): 
      return render_to_response('search.html', {'form':f}) 
     else: 
      pages = Page.objects.filter(name__contains = f.cleaned_data['text']) 
      return render_to_response('search.html', {'form':f, 'pages':pages}) 
    f = SearchForm() 
    return render_to_response('search.html', {'form':f}) 

specialPages = {'SearchPage':search_page} 

def view_page(request, page_name): 
    if page_name in specialPages: 
     return specialPages[page_name](request) 
    try: 
     page = Page.objects.get(pk=page_name) 
    except Page.DoesNotExist: 
     return render_to_response('create.html', {'page_name':page_name}) 

    content = page.content  
    return render_to_response('view.html', {'page_name':page_name, 'content':markdown.markdown(content)}) 
  1. 우리가 request.methodPOST 수 있는지 지정해야 할 이유 - 암시 적으로 HTML 버튼을 클릭하지 않을를 뭔가를 바꾸거나 영향을 줄 의도가 있다고 신호합니까? 또는 POST은 작업이 데이터베이스에 영향을 줄 때만 적합합니까?

  2. 라인 pages = Page.objects.filter(name__contains = f.cleaned_data['text'])은 어떻게 작동합니까? 모델 Page(models.Model)이 필요하지만이 경우 '객체'및 '필터'메소드는 무엇을합니까? view_page에서

  3. , 왜 우리가 return specialPages[page_name](request)

감사에 (request)를 추가해야한다!

+8

[Django Tutorial] (https://docs.djangoproject.com/en/dev/intro/tutorial01/)을 먼저 수행해야합니다. 가지고 있다면,이 모든 답을 알아야합니다. 그것은 오래 걸리지 않으며 당신도 그것을 즐길 수 있습니다. –

+0

https://docs.djangoproject.com/en/dev/topics/forms/ – dm03514

답변

1
  1. POST 테스트가 차별화 요소로 사용됩니다.

    GET으로보기를 호출하면 양식이 렌더링됩니다. 이 양식은 POST을 사용하여 제출해야한다고 지정하므로 코드에서는 POST 요청 양식이 제출되었다고 가정합니다.

  2. objects 특성은 실제 데이터베이스 쿼리를 트리거합니다. .filter() 호출을 추가하여 더 구체적인 데이터베이스 쿼리를 지정하면 name 특성에 f.cleaned_data['text'] 값이 포함됩니다. 결과는 해당 쿼리와 일치하는 데이터베이스 결과 집합입니다.

  3. 사전 값은 자체보기이며 이들이 작동하려면 request 매개 변수를 사용하여 호출합니다. view_page보기 호출 기능 자체와 동일합니다.

관련 문제