博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学一学书里的django是怎么写views.py的
阅读量:6873 次
发布时间:2019-06-26

本文共 7922 字,大约阅读时间需要 26 分钟。

他山之石,可以攻玉嘛。

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

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

from django.core.urlresolvers import reverse_lazyfrom django.shortcuts import redirect, get_object_or_404from django.forms.models import modelform_factoryfrom django.apps import appsfrom django.views.generic.base import TemplateResponseMixin, Viewfrom django.views.generic.list import ListViewfrom django.views.generic.edit import CreateView, UpdateView, DeleteViewfrom braces.views import LoginRequiredMixin, PermissionRequiredMixinfrom braces.views import CsrfExemptMixin, JsonRequestResponseMixinfrom .models import Course, Module, Contentfrom .forms import ModuleFormSetfrom django.db.models import Countfrom .models import Subjectfrom django.views.generic.detail import DetailViewfrom 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

 

转载地址:http://kbpfl.baihongyu.com/

你可能感兴趣的文章
实用JVM参数总结
查看>>
oracle 11g R2 64位 安装详细步骤
查看>>
Jpeg 库的解码OpenCL优化
查看>>
正则表达式
查看>>
『中级篇』docker之虚拟机创建vagrant技巧(番外篇)(81)
查看>>
交换机SPAN功能配置
查看>>
MySQL 架构组成—存储引擎
查看>>
基于数值分析思想对多项式求值的原理和应用进行探究
查看>>
vue-devtools vue开发调试神器
查看>>
PHP扩展模块的安装
查看>>
BGP基础操作
查看>>
SimpleXml项目
查看>>
php下使用PDO创建sqlite3数据库
查看>>
Istio技术与实践6:Istio如何为服务提供安全防护能力
查看>>
ISTP的重要作用
查看>>
驼峰设计 PPT美化
查看>>
Python Python 正则 取中括号值
查看>>
uva 658(Dijkstra)
查看>>
uva 11183(最小树形图)
查看>>
sql 集合查询 数据更新操作语句
查看>>