Django 실전(4): scaffold 생성물 분석

7949 단어 django
에서하나의 플러그인으로 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 프로필에 쓴 다음 프로젝트에서 인용합니다.
다음은 생성된 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 폼 등이 있다.
기본적으로 전형적인 웹 응용 상호작용의 내용을 포함한다.

좋은 웹페이지 즐겨찾기