-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.methodHTML ボタンをクリックすることは、何かを変更/影響する意図を暗に示すのではないでしょうかPOST? それともPOST、アクションがデータベースに影響を与える場合にのみ適切ですか?

  2. ラインはどのように機能しpages = Page.objects.filter(name__contains = f.cleaned_data['text'])ますか?モデルPage(models.Model)が必要ですが、この場合、「オブジェクト」メソッドと「フィルター」メソッドは何をしますか?

  3. view_page、なぜ追加する必要がある(request)のですかreturn specialPages[page_name](request)

ありがとう!

4

1 に答える 1

1
  1. POSTテストは差別化要因として使用されます。

    ビューが で呼び出されるとGET、フォームがレンダリングされます。フォームは using で送信する必要があることを指定しているため、コードはリクエストがフォームの送信を通知するPOSTと想定しています。POST

  2. このobjects属性は、実際のデータベース クエリをトリガーします。呼び出しを追加することで、属性に の値が含まれる.filter()、より具体的なデータベース クエリを指定します。結果は、そのクエリに一致する一連のデータベース結果です。namef.cleaned_data['text']

  3. ディクショナリのspecialPages値はそれ自体がビューであり、これらを機能させるには、requestパラメーターを使用してそれらを呼び出します。view_pageビュー callable 自体と同じです。

于 2012-09-14T14:21:08.760 に答える