Django====>>実戦学習編三MODEL以外で知っておくべきこと

10544 ワード

###djangoのscaffold:
railsのscaffoldに対して、すなわちmodelに基づいてcrudインタフェースが自動的に生成される.djangoはプラグインdjang-groundworkを導入し、簡単な構成で使用できます.拡張しましたpyコマンド
$git clone https://github.com/madhusudancs/django-groundwork.git

$ls django-groundwork

AUTHORS           LICENSE           README.rst        django-groundwork

その中のdjango-groundworkをプロジェクトにコピーし、setting.pyにappを追加
   ,  $python manage.py help    ,            groundwork。    :

$python manage.py groundwork appname ModelName1 ModelName2

       app Product  scaffold:

$python manage.py groundwork depotapp Product,       scaffold。 

         (python manage.py runserver),          :

http://localhost:8000/depotapp/product/list/    Product  ,    create,edit,view   。

###django-groundwork生成物分析
実はその生成物はURLconf+MTVにほかならない!!
まずURLconfを見てみましょう.
    django   1.4   ,            ,  :

   manage.py   urls.py   setting.py      templtes  

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

  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<id>[^/]+)/$', edit_product),
      (r'product/view/(?P<id>[^/]+)/$', view_product),
  )

MTVの表示を続行
M    , T, templates             

[shishang@shishang templates]$ ls
base.html  depotapp
[shishang@shishang templates]$ ls depotapp/
create_product.html  edit_product.html  list_product.html  view_product.html
[shishang@shishang templates]$ pwd
/home/shishang/depot/templates

  depotapp  views    :

  4 from django import forms
  5 from django.template import RequestContext
  6 from django.http import HttpResponse, HttpResponseRedirect
  7 from django.template.loader import get_template
  8 from django.core.paginator import Paginator
  9 from django.core.urlresolvers import reverse
 10 
 11 # app specific files
 12 
 13 from models import *
 14 from forms import *
 15 
 16 
 17 def create_product(request):
 18     form = ProductForm(request.POST or None)
 19     if form.is_valid():
 20         form.save()
 21         form = ProductForm()
 22 
 23     t = get_template('depotapp/create_product.html')
 24     c = RequestContext(request,locals())
 25     return HttpResponse(t.render(c))
 26 
 27 
 28 
 29 def list_product(request):
 30 
 31     list_items = Product.objects.all()
 32     paginator = Paginator(list_items ,10)
 33 
 34 
 35     try:
 36         page = int(request.GET.get('page', '1'))
 37     except ValueError:
 38         page = 1
 39 
 40     try:
 41         list_items = paginator.page(page)
 42     except :
 43         list_items = paginator.page(paginator.num_pages)
 44 
 45     t = get_template('depotapp/list_product.html')
 46     c = RequestContext(request,locals())
 47     return HttpResponse(t.render(c))
 48 
 49 
 50 
 51 def view_product(request, id):
 52     product_instance = Product.objects.get(id = id)
 53 
 54     t=get_template('depotapp/view_product.html')
 55     c=RequestContext(request,locals())
 56     return HttpResponse(t.render(c))
 57 
 58 def edit_product(request, id):
 59 
 60     product_instance = Product.objects.get(id=id)
 61 
 62     form = ProductForm(request.POST or None, instance = product_instance)
 63 
 64     if form.is_valid():
 65         form.save()
 66 
 67     t=get_template('depotapp/edit_product.html')
 68     c=RequestContext(request,locals())
 69     return HttpResponse(t.render(c))

ビューの内容は比較的多く、主にテンプレートであり、次にモデルクラス、formフォームなどがあり、基本的に典型的なwebインタラクティブアプリケーションの内容をカバーしています.
depotapp forms.py  


  1 
  2 from django import forms
  3 from models import *
  4 
  5 
  6 
  7 class ProductForm(forms.ModelForm):
  8 
  9     class Meta:
 10         model = Product
 11         # exclude = [] # uncomment this line and specify any field to exclude it from the form
 12 
 13     def __init__(self, *args, **kwargs):
 14         super(ProductForm, self).__init__(*args, **kwargs)
 15 

実は初学の時、scaffoldという自動生成のコードの内容を自分で書いて、理解を深めることをお勧めします.