2012-09-14 87 views
-1

我想更好地理解下面的代碼。它的工作,但我不完全瞭解的幾個要素(以下問題):下面的Django代碼是如何工作的?

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.method必須是POST - 不會點擊一個HTML按鈕隱表示意圖改變/影響某物?或POST只適用於操作影響數據庫的情況嗎?

  2. pages = Page.objects.filter(name__contains = f.cleaned_data['text'])如何工作?它需要模型Page(models.Model),但在這種情況下,「對象」和「過濾器」方法做了什麼?

  3. view_page,爲什麼我們需要在return specialPages[page_name](request)

由於添加(request)

+8

你應該先通過[Django教程](https://docs.djangoproject.com/zh/dev/intro/tutorial01/)。如果你有,你應該知道所有這些答案。它不需要很長時間,你甚至可以享受它。 –

+0

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

回答

1
  1. POST測試用作區別。

    當用GET調用視圖時,表單將被渲染。該表單指定需要使用POST來提交,因此代碼假定POST請求信號表示已提交。

  2. objects屬性觸發實際的數據庫查詢。通過添加.filter()調用,可以指定更具體的數據庫查詢,其中name屬性包含值f.cleaned_data['text']。結果是與該查詢匹配的一組數據庫結果。

  3. specialPages字典值本身是視圖,對於這些工作,您可以使用request參數調用它們。就像view_page視圖可自行調用。

相關問題