Django實戰(4):scaffold生成物分析


上一節用一個插件生成了類似rails的scaffold,其實無非就是URLconf+MTV。讓我們看看具體都生成了哪些東西。
首先是“入口”的定義即URLconf,打開urls.py:

from django.conf.urls.defaults import patterns, include, url
from depot.views import hello

urlpatterns = patterns('',
     url(r'^hello/ hello),
)
urlpatterns += patterns ('',
 (r'^depotapp/', include('depotapp.urls')),
)

 

上面的代碼中增加的配置行表示:以depotapp開頭的url由depotapp/urls.py文件進行處理。

django的url配置中,除了(正則表達式,view函數)的方式外,還支持(正則表達式,include文件)的方式。通常把app自身相關的url寫到自己的url配置文件中,然后在project中引用。

接下來看一下生成的depotapp/urls.py的內容:

from django.conf.urls.defaults import *
from models import *
from views import *

urlpatterns = patterns('',
    (r'product/create/$', create_product),
    (r'product/list/$', list_product ),
    (r'product/edit/(?P[^/]+)/$', edit_product),
    (r'product/view/(?P[^/]+)/$', view_product),
)

 

將CRU(沒有D)的URL映射到了視圖。而視圖在depotapp/views.py中定義:

from django import forms
from django.template import RequestContext
from django.http import HttpResponse, HttpResponseRedirect
from django.template.loader import get_template
from django.core.paginator import Paginator
from django.core.urlresolvers import reverse

# app specific files

from models import *
from forms import *


def create_product(request):
    form = ProductForm(request.POST or None)
    if form.is_valid():
        form.save()
        form = ProductForm()

    t = get_template('depotapp/create_product.html')
    c = RequestContext(request,locals())
    return HttpResponse(t.render(c))



def list_product(request):
  
    list_items = Product.objects.all()
    paginator = Paginator(list_items ,10)


    try:
        page = int(request.GET.get('page', '1'))
    except ValueError:
        page = 1

    try:
        list_items = paginator.page(page)
    except :
        list_items = paginator.page(paginator.num_pages)

    t = get_template('depotapp/list_product.html')
    c = RequestContext(request,locals())
    return HttpResponse(t.render(c))



def view_product(request, id):
    product_instance = Product.objects.get(id = id)

    t=get_template('depotapp/view_product.html')
    c=RequestContext(request,locals())
    return HttpResponse(t.render(c))

def edit_product(request, id):

    product_instance = Product.objects.get(id=id)

    form = ProductForm(request.POST or None, instance = product_instance)

    if form.is_valid():
        form.save()

    t=get_template('depotapp/edit_product.html')
    c=RequestContext(request,locals())
    return HttpResponse(t.render(c))

 

視圖中的相關內容比較多,主要的是模板,其次還有模型類、Paginator分頁器、Form表單等等。

基本涵蓋了典型的web應用交互的內容。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM