2012-09-14 41 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视图可自行调用。

相关问题