Django====>>実戦学習編三MODEL以外で知っておくべきこと
10544 ワード
###djangoのscaffold:
railsのscaffoldに対して、すなわちmodelに基づいてcrudインタフェースが自動的に生成される.djangoはプラグインdjang-groundworkを導入し、簡単な構成で使用できます.拡張しましたpyコマンド
その中のdjango-groundworkをプロジェクトにコピーし、setting.pyにappを追加
###django-groundwork生成物分析
実はその生成物はURLconf+MTVにほかならない!!
まずURLconfを見てみましょう.
MTVの表示を続行
ビューの内容は比較的多く、主にテンプレートであり、次にモデルクラス、formフォームなどがあり、基本的に典型的なwebインタラクティブアプリケーションの内容をカバーしています.
実は初学の時、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という自動生成のコードの内容を自分で書いて、理解を深めることをお勧めします.