码迷,mamicode.com
首页 > 其他好文 > 详细

学一学书里的django是怎么写views.py的

时间:2016-08-04 13:13:14      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:

他山之石,可以攻玉嘛。

好的习惯有时也是学别人来养成的。

外国人的编码习惯,学啊。

from django.core.urlresolvers import reverse_lazy
from django.shortcuts import redirect, get_object_or_404
from django.forms.models import modelform_factory
from django.apps import apps
from django.views.generic.base import TemplateResponseMixin, View
from django.views.generic.list import ListView
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from braces.views import LoginRequiredMixin, PermissionRequiredMixin
from braces.views import CsrfExemptMixin, JsonRequestResponseMixin
from .models import Course, Module, Content
from .forms import ModuleFormSet
from django.db.models import Count
from .models import Subject
from django.views.generic.detail import DetailView
from students.forms import CourseEnrollForm
# Create your views here.


class OwnerMixin(object):
    def get_queryset(self):
        qs = super(OwnerMixin, self).get_queryset()
        return qs.filter(owner=self.request.user)


class OwnerEditMixin(object):
    def form_valid(self, form):
        form.instance.owner = self.request.user
        return super(OwnerEditMixin, self).form_valid(form)


class OwnerCourseMixin(OwnerMixin, LoginRequiredMixin):
    model = Course
    fields = [subject, title, slug, overview]
    success_url = reverse_lazy(manage_course_list)


class OwnerCourseEditMinxin(OwnerCourseMixin, OwnerEditMixin):
    fields = [subject, title, slug, overview]
    success_url = reverse_lazy(manage_course_list)
    template_name = courses/manage/course/form.html


class ManageCourseListView(OwnerCourseMixin, ListView):

    template_name = courses/manage/course/list.html


class CourseCreateView(PermissionRequiredMixin,
                       OwnerCourseEditMinxin,
                       CreateView):
    permission_required = courses.add_course


class CourseUpdateView(PermissionRequiredMixin,
                       OwnerCourseEditMinxin,
                       UpdateView):
    permission_required = courses.change_course


class CourseDeleteView(PermissionRequiredMixin,
                       OwnerCourseMixin,
                       DeleteView):
    template_name = courses/manage/course/delete.html
    success_url = reverse_lazy(manage_course_list)
    permission_required = courses.delete_course


class CourseModuleUpdateView(TemplateResponseMixin, View):
    template_name = courses/manage/module/formset.html
    course = None

    def get_formset(self, data=None):
        return ModuleFormSet(instance=self.course,
                             data=data)

    def dispatch(self, request, pk):
        self.course = get_object_or_404(Course, id=pk, owner=request.user)
        return super(CourseModuleUpdateView, self).dispatch(request, pk)

    def get(self, request, *args, **kwargs):
        formset = self.get_formset()
        return self.render_to_response({course: self.course,
                                        formset: formset})

    def post(self, request, *args, **kwargs):
        formset = self.get_formset(data=request.POST)
        if formset.is_valid():
            formset.save()
            return redirect(manage_course_list)
        return self.render_to_response({course: self.course,
                                        formset: formset})


class ContentCreateUpdateView(TemplateResponseMixin, View):
    module = None
    model = None
    obj = None
    template_name = courses/manage/content/form.html

    def get_model(self, model_name):
        if model_name in [text, video, image, file]:
            return apps.get_model(app_label=courses,
                                  model_name=model_name)
        return None

    def get_form(self, model, *args, **kwargs):
        Form = modelform_factory(model, exclude=[owner,
                                                 order,
                                                 created,
                                                 updated])
        return Form(*args, **kwargs)

    def dispatch(self, request, module_id, model_name, id=None):
        self.module = get_object_or_404(Module,
                                        id=module_id,
                                        course__owner=request.user)
        self.model = self.get_model(model_name)
        if id:
            self.obj = get_object_or_404(self.model, id=id, owner=request.user)
        return super(ContentCreateUpdateView, self).dispatch(request, module_id, model_name, id)

    def get(self, request, module_id, model_name, id=None):
        form = self.get_form(self.model, instance=self.obj)
        return self.render_to_response({form: form, object: self.obj})

    def post(self, request, module_id, model_name, id=None):
        form = self.get_form(self.model,
                             instance=self.obj,
                             data=request.POST,
                             files=request.FILES)
        if form.is_valid():

            obj = form.save(commit=False)
            obj.owner = request.user
            obj.save()
            print id, &&&&&&&&&&&
            if not id:
                print ****************
                Content.objects.create(module=self.module,
                                       item=obj)
                print ****************
            return redirect(module_content_list, self.module.id)
        return self.render_to_response({form: form, object: self.obj})


class ContentDeleteView(View):
    def post(self, request, id):
        content = get_object_or_404(Content,
                                    id=id,
                                    module__course__owner=request.user)
        module = content.module
        content.item.delete()
        content.delete()
        return redirect(module_content_list, module.id)


class ModuleContentListView(TemplateResponseMixin, View):
    template_name = courses/manage/module/content_list.html

    def get(self, request, module_id):
        module = get_object_or_404(Module,
                                   id=module_id,
                                   course__owner=request.user)
        return self.render_to_response({module: module})


class ModuleOrderView(CsrfExemptMixin,
                      JsonRequestResponseMixin,
                      View):
    def post(self, request):
        for id, order in self.request_json.items():
            Module.objects.filter(id=id,
                                  course__owner=request.user).update(order=order)
        return self.render_json_response({saved: OK})


class ContentOrderView(CsrfExemptMixin,
                       JsonRequestResponseMixin,
                       View):
    def post(self, request):
        for id, order in self.request_json.items():
            Content.objects.filter(id=id,
                                   module__course__owner=request.user)                .update(order=order)
        return self.render_json_response({saved: OK})


class CourseListView(TemplateResponseMixin, View):
    model = Course
    template_name = courses/course/list.html

    def get(self, request, subject=None):
        subjects = Subject.objects.annotate(
            total_courses=Count(courses)
        )
        courses = Course.objects.annotate(
            total_modules=Count(modules)
        )
        if subject:
            subject = get_object_or_404(Subject, slug=subject)
            courses = courses.filter(subject=subject)
        print ***********, subjects, courses, subject
        return self.render_to_response({subjets: subjects,
                                        subject: subject,
                                        courses: courses})


class CourseDetailView(DetailView):
    model = Course
    template_name = courses/course/detail.html

    def get_context_data(self, **kwargs):
        context = super(CourseDetailView,
                        self).get_context_data(**kwargs)
        context[enroll_form] = CourseEnrollForm(
            initial={course: self.object})
        return context

 

学一学书里的django是怎么写views.py的

标签:

原文地址:http://www.cnblogs.com/aguncn/p/5736129.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!