【问题标题】:How does the following Django code work? [closed]以下 Django 代码如何工作? [关闭]
【发布时间】:2012-09-14 14:16:17
【问题描述】:

我正在尝试更好地理解以下代码。它有效,但我只是不完全理解几个要素(以下问题):

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),但在这种情况下,'objects' 和 'filter' 方法是做什么的呢?

  3. view_page中,为什么要在return specialPages[page_name](request)中添加(request)

谢谢!

【问题讨论】:

标签: python django django-forms django-views


【解决方案1】:
  1. POST 测试用作区分器。

    当使用GET 调用视图时,会呈现表单。表单指定需要使用POST 提交,因此代码假定POST 请求表示表单已提交。

  2. objects 属性触发实际的数据库查询。通过添加.filter() 调用,您可以指定更具体的数据库查询,其中name 属性包含f.cleaned_data['text'] 的值。结果是一组与该查询匹配的数据库结果。

  3. specialPages 字典值本身就是视图,要使它们起作用,您可以使用 request 参数调用它们。就像 view_page 视图本身一样。

【讨论】:

    猜你喜欢
    • 2021-09-05
    • 1970-01-01
    • 2017-03-19
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多