Web весна 2013 лекция 7

Embed Size (px)

Citation preview

  • 1.

2. 3. from django import forms class ContactForm(forms.Form): email = forms.EmailField(label=u' e-mail', max_length=100) message = forms.CharField(label=u'', widget=forms.Textarea) 4. >>> f = ContactForm() >>> data = {'email': '[email protected]', 'message': 'Hi there} >>> f = ContactForm(data) >>> f.is_valid() True >>> f.cleaned_data {'email': u'[email protected]', 'message': u'Hi there} >>> f = ContactForm({}) >>> f.is_valid() False >>> f.errors {'email': [u'Enter a valid e-mail address.'], 'message': [u'This field is required.']} >>> f = ContactForm() >>> print f.as_table() email: 5. from blog.forms import ContactForm from django.core.mail import send_mail from django.http import HttpResponseRedirect def contact(request): if request.method == 'POST': form = ContactForm(request.POST) if form.is_valid(): subject = u' ' message = form.cleaned_data['message'] sender = form.cleaned_data['email'] recipients = ['[email protected]'] send_mail(subject, message, sender, recipients) return HttpResponseRedirect('/') else: form = ContactForm() return render(request, 'blog/contact.html', { 'form': form }) 6. {% extends "base.html" %} {% block content %} {% csrf_token %} {{ form.as_p }} {% endblock %} 7. from django import forms class PostForm(forms.ModelForm): class Meta: model = Article fields = ('title', 'content', 'category') 8. 9. from django import template from blog.models import Post register = template.Library()@register.inclusion_tag('blog/tags/last_posts.html') def last_posts(): return {'post_list': Post.objects.all()[:5]} 10.

  • {% for object in post_list %}
  • {{ object }} {% endfor %}

{% load blog_tags %} {% last_posts %} 11. 12. def post_detail(request, pk): try: object = Post.objects.get(pk=pk) except Post.DoesNotExist: raise Http404 return render( request, 'blog/post_detail.html', {'object': object} )urlpatterns = patterns('', url(r'^post/(?Pd+)/$', post_detail, name='post_detail'), ) 13. class PostDetail(generic.DetailView): model=Posturlpatterns = patterns('', url(r'^post/(?Pd+)/$', PostDetail.as_view(), name='post_detail'), ) 14. def post_list(request): paginator = Paginator(Post.objects.all(), 25) page = request.GET.get('page') try: posts = paginator.page(page) except PageNotAnInteger: posts = paginator.page(1) except EmptyPage: posts = paginator.page(paginator.num_pages) return render( request, 'blog/post_list.html', {'object_list': posts} ) 15. class PostList(generic.ListView): model = Post paginate_by = 25 16. @login_required def category(request, pk): cat = get_object_or_404(Category, pk=pk) post_list = Post.objects.filter(category=cat) return render(request, 'blog/category.html', { 'category': cat, 'post_list' : post_list }) 17. class CategoryListView(generic.ListView): template_name = 'blog/category.html' def get_queryset(self): self.cat = get_object_or_404(Category, pk=self.kwargs['pk']) return Post.objects.filter(category=self.cat) @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super(CategoryListView, self).dispatch(*args, **kwargs) def get_context_data(self, **kwargs): context = super(CategoryListView, self).get_context_data(**kwargs) context['category'] = self.cat return context 18. from django.conf.urls import patterns, include, url # Uncomment the next two lines to enable the admin: from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', # Uncomment the next line to enable the admin: url(r'^admin/', include(admin.site.urls)), ) 19. from blog.models import Category, Post from django.contrib import adminclass PostAdmin(admin.ModelAdmin): date_hierarchy = 'creation_date' list_display = ('title', 'category') list_filter = ('category',) search_fields = ('title',)admin.site.register(Category) admin.site.register(Post, PostAdmin) 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.