Exemple #1
0
class ClassListHandler(PermissionHandler, StarkHandler):
    def display_course(self, obj=None, is_header=None, *args, **kwargs):
        if is_header:
            return '班级'
        return '%s (%s)期' % (
            obj.course.name,
            obj.semester,
        )

    def display_course_record(self, obj=None, is_header=None, *args, **kwargs):
        if is_header:
            return '上课记录'
        record_url = reverse('stark:web_courserecord_list',
                             kwargs={'class_id': obj.pk})  # 带上id 反向生成别名
        return mark_safe('<a target="_blank" href="%s">上课记录</a>' % record_url)

    list_display = [
        'school',
        display_course,
        get_datetime_text('开班日期', 'start_date'),
        'class_teacher',
        get_m2m_text('老师', 'tech_teacher'),
        display_course_record,
    ]  # 自定义显示

    model_form_class = ClassListModelForm  # 自定义的样式(时间格式)

    # 加上组合搜索
    search_group = [
        Option(field='school'),
        Option(field='course'),
    ]
Exemple #2
0
class UserInfoHandler(StarkHandler):

    # def display_gender(self, obj=None, is_header=None):
    #     if is_header:
    #         return "性别"
    #     return obj.get_gender_display
    #
    # def display_classes(self, obj=None, is_header=None):
    #     if is_header:
    #         return "班级"
    #
    #     return obj.get_classes_display

    # 定制页面显示的列,我这里定义几个,则页面显示几个列
    list_display = [StarkHandler.display_checkbox,
                    'name', 'age', 'email',
                    get_choice_text('性别', 'gender'),
                    get_choice_text('班级', 'classes'),
                    StarkHandler.display_edit,
                    StarkHandler.display_del]

    # def get_list_display(self):
    #     return ['name', 'age', 'email', 'depart']

    has_add_btn = True

    order_list = ['id']
    search_list = ['name__contains']
    action_list = [StarkHandler.action_multi_delete, ]
    search_group = [
        Option('gender', is_multi=True),
        Option('depart', db_condition={'id__gt': 0}),
    ]
Exemple #3
0
class UserInfoHandler(StarkHandler):
    # 定制页面显示的列
    list_display = [
        StarkHandler.display_checkbox, 'name',
        get_choice_text('性别', 'gender'),
        get_choice_text('班级', 'classes'), 'age', 'email', 'depart',
        StarkHandler.display_edit, StarkHandler.display_del
    ]

    per_page_count = 10
    has_add_btn = True
    # model_form_class = UserInfoModelForm

    order_list = ['id']

    search_list = ['name__contains', 'email__contains']

    action_list = [
        StarkHandler.action_multi_delete,
    ]

    # def save(self, form, is_update=False):
    #     form.instance.depart_id = 1
    #     form.save()

    search_group = [
        Option('gender', is_multi=True),
        Option('depart', db_condition={'id__gt': 0})
        # MyOption('depart', {'id__gt': 2}),
        # Option('gender', text_func=lambda field_object: field_object[1] + '666'),
    ]
Exemple #4
0
class StudentHandler(PermissionHandler, ResetPasswordHandler, StarkHandler):
    search_group = [
        Option(field='education'),
        Option(field='course'),
    ]
    search_list = ['stu_name__contains', 'teacher__nickname__contains']
    list_display = ['stu_name',
                    get_choice_text('性别', 'stu_gender'),
                    'school',
                    get_choice_text('年级', 'education'),
                    get_m2m_text('报名科目', 'course'),
                    get_m2m_text('任课老师', 'teacher'), ResetPasswordHandler.display_reset_pwd
                    ]

    def get_model_form_class(self, is_add, request, *args, **kwargs):
        if is_add:
            return StudentAddModelForm

        return StudentUpdateModelForm

    def save(self, request, form, is_update, *args, **kwargs):
        # 给学生分配教师的角色
        if not is_update:
            form.save()
            role_obj = Role.objects.filter(title='学生').first()
            student_obj = form.instance
            student_obj.roles.add(role_obj)
            student_obj.save()
        form.save()
Exemple #5
0
class UserInfoHandler(StarkHandler):
    """
    用户相关视图函数处理类
    """
    # 自定义页面显示列
    display_list = [
        StarkHandler.display_checkbox,
        'name',
        get_choice_text('性别', 'gender'),
        get_choice_text('班级', 'classes'),
        'age', 'email', 'depart',
        StarkHandler.display_edit,
        StarkHandler.display_del,
    ]
    # 自定义每页显示条目数量
    per_page_count = 10
    # 自定义页面是否显示添加按钮
    has_add_btn = True
    # 自定义页面表单模型
    # model_form_class = UserInfoModelForm
    # 自定义排序关键字列表
    order_list = ['id']
    # 自定义搜索关键词列表
    search_list = ['name__contains', 'email__contains']
    # 自定义页面可批量操作功能列表
    action_list = [StarkHandler.action_multi_delete,]
    # 自定义页面组合搜索可选项组合
    search_group = [
        Option('gender', is_multi=True),
        # MyOption('depart', {'id__gt': 2}),
        Option('depart', db_condition={'id__gt': 0}),
        # Option('gender', text_func=lambda field_obj: field_obj[1] + '666'),
    ]
class ClassListHandler(PermissionHandler,StarkHandler):

	def display_course(self, obj=None, is_header=None,*args,**kwargs):
		if is_header:
			return '班级'

		return "%s  %s期" % (obj.course.name, obj.semester)

	def display_course_record(self, obj=None, is_header=None, *args, **kwargs):
		if is_header:
			return '上课记录'
		record_url = reverse('stark:web_courserecord_list', kwargs={'class_id': obj.pk})
		return mark_safe('<a target="_blank" href="%s">上课记录</a>'% record_url)

	list_display = [
		'school',
		display_course,
		'price',
		get_datetime_text('开班日期','start_date'),
		'class_teacher',
		get_m2m_text('任课老师','tech_teachers'),
		display_course_record
	]

	model_form_class = ClassListModelForm

	search_group = [
		Option('school'),
		Option('course')
	]
Exemple #7
0
class TeacherHandler(PermissionHandler,ResetPasswordHandler, StarkHandler):
    list_display = ['nickname',
                    get_choice_text('性别', 'gender'),
                    'phone', 'wechat',
                    get_m2m_text('教授科目', 'course'), 'free_time', ResetPasswordHandler.display_reset_pwd]
    search_list = ['nickname__contains', 'free_time__contains']
    search_group = [
        Option(field='gender'),
        Option(field='course'),
    ]

    def get_model_form_class(self, is_add, request, *args, **kwargs):
        if is_add:
            return TeacherAddModelForm

        return TeacherUpdateModelForm

    def save(self, request, form, is_update, *args, **kwargs):
        # 给老师分配教师的角色
        if not is_update:
            form.save()
            role_obj = Role.objects.filter(title='教师').first()
            teacher_obj = form.instance
            teacher_obj.roles.add(role_obj)
        form.save()
Exemple #8
0
class UserInfoHandler(StarkHandler):
	def display_reset_pwd(self, obj=None, is_header=None):
		if is_header:
			return "重置密码"
		parse_url = ParseUrl(request=self.request, namespace=self.site.namespace, name=self.get_url_name('reset_pwd'),
		                     pk=obj.pk)
		url = parse_url.memory_url()
		return mark_safe('<a href="%s">重置密码</a>' % url)

	list_display = ['nickname', 'name', get_choice_text('性别', 'gender'), 'phone', 'email', 'depart', display_reset_pwd]

	def get_model_form_class(self, is_add=False):
		"""
		定制添加和编辑页面
		:param is_add:
		:return:
		"""
		if is_add:
			return UserInfoAddModelForm
		return UserInfoChangeModelForm

	def reset_password(self, request, pk):
		"""
		重置密码的视图函数
		:param request:
		:param pk:
		:return:
		"""
		userinfo_object = models.UserInfo.objects.filter(id=pk).first()
		if not userinfo_object:
			return HttpResponse("用户不存在,无法进行重置!")
		if request.method == "GET":
			form = ResetPasswordForm()
			return render(request, 'stark/change.html', {'form': form})
		form = ResetPasswordForm(data=request.POST)
		if form.is_valid():
			userinfo_object.password = form.cleaned_data['password']
			userinfo_object.save()
			parse_url = ParseUrl(request=self.request, namespace=self.site.namespace, name=self.get_list_url_name)
			url = parse_url.memory_url()
			return redirect(url)
		return render(request, 'stark/change.html', {'form': form})

	def extra_urls(self):
		patterns = [
			url(r'^reset/password/(?P<pk>\d+)/$', self.wrapper(self.reset_password),
			    name=self.get_url_name('reset_pwd'))
		]

		return patterns

	# 模糊搜索
	search_list = ['nickname__contains', 'name__contains']

	# 组合搜索
	search_group = [
		Option(field='gender'),
		Option(field='depart', is_multi=True),
	]
Exemple #9
0
class UserInfoHandler(PermissionHandler, StarkHandler):
    def display_reset_pwd(self,
                          obj=None,
                          is_header=None,
                          *args,
                          **kwargs):  # 自定义额外字段,然后加到list_display中即可
        if is_header:
            return '重置密码'
        reset_url = self.reverse_commons_url(self.get_url_name('rest_pwd'),
                                             pk=obj.pk)  # 带上id 反向生成别名
        return mark_safe('<a href="%s">重置密码</a>' % reset_url)

    list_display = [
        'nickname',
        get_choice_text('性别', 'gender'), 'phone', 'email', 'depart',
        display_reset_pwd
    ]
    # 加上模糊搜索
    search_list = ['nickname__contains', 'name__contains']
    # 加上组合搜索
    search_group = [
        Option(field='gender'),
        Option(field='depart'),
    ]

    def get_model_form_class(self, is_add, request, pk, *args, **kwargs):
        if is_add:
            return UserInfoAddModelForm
        return UserInfoEditModelForm

# 扩展功能==================单独一个url处理重置密码功能==================

# 自定义的视图函数,给下面调用

    def reset_password(self, request, pk):
        """重置密码的视图函数"""
        user_object = models.UserInfo.objects.filter(id=pk).first()
        if not user_object:
            return HttpResponse('用户不存在无法重置密码')
        if request.method == 'GET':
            form = ResetPasswordForm
            return render(request, 'stark/change.html', {'form': form})
        # 校验保存
        form = ResetPasswordForm(data=request.POST)
        if form.is_valid():
            # 密码更新到数据库
            user_object.password = form.cleaned_data['password']
            user_object.save()
            return redirect(self.reverse_list_url())  # 直接使用封装好的方法,会跳页面
        return render(request, 'stark/change.html', {'form': form})

    # 自定义增加url(重置密码)用写好的钩子方法
    def extra_urls(self):
        patterns = [
            url(r'^reset/password/(?P<pk>\d+)$',
                self.wrapper(self.reset_password),
                name=self.get_url_name('rest_pwd'))
        ]
        return patterns
Exemple #10
0
class UserInfolHandler(PermissionHandler, StarkHandler):
    order_list = [
        'depart_id',
    ]
    search_list = ['name__contains']
    search_group = [
        Option(field='gender', is_multi=True),
        Option(field='depart'),
    ]

    def reset_user_pwd(title):
        from stark.utils.convert import name2url

        def inner(self, obj=None, is_header=None, *args, **kwargs):
            if is_header:
                return title
            return mark_safe("<a href='%s'>%s</a>" % (name2url(
                self.site.namespace, self.get_url_name('reset_pwd'),
                pk=obj.pk), title))

        return inner

    list_display = [
        'name',
        get_choice_text('性别', 'gender'),
        'phone',
        'depart',
        reset_user_pwd('重置密码'),
    ]

    def get_model_form_class(self, is_add, request, *args, **kwargs):
        if is_add:
            return UserInfoAddModelForm
        else:
            return UserInfoEditModelForm

    def reset_pwd(self, request, pk, *args, **kwargs):
        user_obj = UserInfo.objects.filter(id=pk).first()
        if not user_obj:
            return HttpResponse('user does not exist!')
        form = ResetPwdModelForm()
        if request.method == 'GET':
            return render(request, 'stark/change.html', {'form': form})
        form = ResetPwdModelForm(data=request.POST)
        if form.is_valid():
            pwd = form.cleaned_data['password']
            user_obj.password = pwd
            user_obj.save()
            # 在数据库保存成功后,跳转回列表页面(携带原来的参数)。
            return redirect(self.reverse_list_url())
        return render(request, 'stark/change.html', {'form': form})

    def extra_urls(self):
        patterns = [
            url(r'^resetpwd/(?P<pk>\w+)/$',
                self.wrapper(self.reset_pwd),
                name=self.get_url_name('reset_pwd')),
        ]
        return patterns
class StudentHandler(PermissionHandler, StarkHandler):
    model_form_class = StudentModelForm
    'web_scorerecord_list'

    def display_score(self, obj=None, is_header=None, *args, **kwargs):
        if is_header:
            return '积分管理'
        record_url = reverse('stark:web_scorerecord_list',
                             kwargs={'student_id': obj.pk})
        return mark_safe('<a target="_blank" href="%s">%s</a>' %
                         (record_url, obj.score))

    list_display = [
        'customer', 'qq', 'mobile', 'emergency_contract',
        get_m2m_text('已报班级', 'class_list'), display_score,
        get_choice_text('状态', 'student_status')
    ]

    has_add_btn = False

    def get_list_display(self, request, *args, **kwargs):
        """
		获取页面上应该显示的列,预留的自定义扩展,例如:以后根据用户角色的不同展示不同的列
		:return:
		"""
        value = []
        if self.list_display:
            value.extend(self.list_display)
            value.append(type(self).display_edit)

        return value

    def get_urls(self):
        patterns = [
            url(r'^list/$',
                self.wrapper(self.changelist_view),
                name=self.get_list_url_name),
            # url(r'^add/$', self.wrapper(self.add_view), name=self.get_add_url_name),
            url(r'^change/(?P<pk>\d+)/$',
                self.wrapper(self.change_view),
                name=self.get_change_url_name),
            # url(r'^delete/(?P<pk>\d+)/$', self.wrapper(self.delete_view), name=self.get_delete_url_name),
        ]
        patterns.extend(self.extra_urls())
        return patterns

    search_list = ['customer__name', 'qq', 'mobile']

    search_group = [
        Option('class_list',
               text_func=lambda x: '%s-%s' % (x.school.title, str(x))),
        Option('student_status')
    ]
Exemple #12
0
class UserInfoHandler(PermissionHandler, StarkHandler):
    def display_reset_pwd(self, obj=None, is_header=None, *args, **kwargs):
        if is_header:
            return '重置密码'
        reset_url = self.reverse_commons_url(self.get_url_name('reset_pwd'),
                                             pk=obj.pk)
        return mark_safe("<a href='%s'>重置密码</a>" % reset_url)

    list_display = [
        'nickname',
        get_choice_text('性别', 'gender'), 'phone', 'email', 'depart',
        display_reset_pwd
    ]

    search_list = ['nickname__contains', 'name__contains']

    search_group = [
        Option(field='gender'),
        Option(field='depart'),
    ]

    def get_model_form_class(self, is_add, request, pk, *args, **kwargs):
        if is_add:
            return UserInfoAddModelForm
        return UserInfoChangeModelForm

    def reset_password(self, request, pk):
        """
        重置密码的视图函数
        :param request:
        :param pk:
        :return:
        """
        userinfo_object = models.UserInfo.objects.filter(id=pk).first()
        if not userinfo_object:
            return HttpResponse('用户不存在,无法进行密码重置!')
        if request.method == 'GET':
            form = ResetPasswordForm()
            return render(request, 'stark/change.html', {'form': form})
        form = ResetPasswordForm(data=request.POST)
        if form.is_valid():
            userinfo_object.password = form.cleaned_data['password']
            userinfo_object.save()
            return redirect(self.reverse_list_url())
        return render(request, 'stark/change.html', {'form': form})

    def extra_urls(self):
        patterns = [
            url(r'^reset/password/(?P<pk>\d+)/$',
                self.wrapper(self.reset_password),
                name=self.get_url_name('reset_pwd')),
        ]
        return patterns
Exemple #13
0
class CheckPaymentRecordHandler(PermissionHandler, StarkHandler):
    search_group = [Option('confirm_status'), Option('consultant')]
    order_list = ['confirm_status']
    list_display = [
        StarkHandler.display_checkbox, 'consultant', 'customer', 'paid_fee',
        get_choice_text('类型', 'pay_type'),
        get_choice_text('状态', 'confirm_status'), 'apply_date'
    ]

    def get_list_display(self, request, *args, **kwargs):
        return self.list_display

    has_add_btn = False

    def get_urls(self):
        patterns = [
            re_path(r'^list/$',
                    self.wrapper(self.changelist_view),
                    name=self.get_list_url_name),
        ]
        return patterns

    def action_multi_check(self, request, *args, **kwargs):
        pk_list = request.POST.getlist('pk')
        for pk in pk_list:
            payrecord_obj = self.model_class.objects.filter(
                id=pk, confirm_status=1).first()
            if not payrecord_obj:
                continue
            payrecord_obj.confirm_status = 2
            payrecord_obj.customer.status = 1
            payrecord_obj.save()
            payrecord_obj.customer.save()

    action_multi_check.text = "批量通过审核"

    def action_multi_cancle(self, request, *args, **kwargs):

        pk_list = request.POST.getlist('pk')
        for pk in pk_list:
            payrecord_obj = self.model_class.objects.filter(
                id=pk, confirm_status=1).first()
            if not payrecord_obj:
                continue
            payrecord_obj.confirm_status = 3
            payrecord_obj.save()

    action_multi_cancle.text = "批量驳回"

    action_list = [action_multi_check, action_multi_cancle]
Exemple #14
0
class ClassListHandler(StarkHandler):
    def display_course(self, obj=None, is_header=None):
        if is_header:
            return '班级'
        return "%s  %s期" % (obj.course.name, obj.semester)

    list_display = [
        'school', display_course, 'price',
        get_datetime_text('开班日期', 'start_date'), 'class_teacher',
        get_m2m_text('任课老师', 'tech_teachers')
    ]

    model_form_class = ClassListModelForm

    search_group = [Option('school'), Option('course')]
Exemple #15
0
class UserInfoHandler(StarkHandler):
    def display_reset_pwd(self, obj=None, is_header=None, *args, **kwargs):
        if is_header:
            return "重置密码"

        reset_url = self.reverse_commons_url(self.get_url_name('reset_pwd'),
                                             pk=obj.pk)
        return mark_safe(
            '<a class="btn btn-small btn-info" href="%s">重置密码</a>' % reset_url)

    list_display = [
        'name', 'nickname', 'email', 'depart',
        get_choice_text('状态', 'status'), display_reset_pwd
    ]

    def get_model_form_class(self, is_add, request, pk, *args, **kwargs):
        """
		定制添加和编辑页面
		:param is_add:
		:param request:
		:param pk:
		:param args:
		:param kwargs:
		:return:
		"""
        if is_add:
            return UserInfoAddModelForm
        return UserInfoChangeModelForm

    def reset_password(self, request, pk):
        """
		重置密码
		:param request:
		:param pk: 重置密码的 用户ID
		:return:
		"""

        userinfo_object = models.UserInfo.objects.filter(id=pk).first()
        if not userinfo_object:
            return HttpResponse("用户不存在,无法进行重置!")
        if request.method == "GET":
            form = ResetPasswordForm()
            return render(request, 'stark/change.html', {'form': form})
        form = ResetPasswordForm(data=request.POST)
        if form.is_valid():
            userinfo_object.password = form.cleaned_data['password']
            userinfo_object.save()
            return redirect(self.reverse_list_url())
        return render(request, 'stark/change.html', {'form': form})

    def extra_urls(self):
        patterns = [
            url(r'^reset/password/(?P<pk>\d+)/$',
                self.wrapper(self.reset_password),
                name=self.get_url_name('reset_pwd'))
        ]
        return patterns

    search_list = ['name__contains', 'nickname__contains', 'email_contains']
    search_group = [Option(field='depart')]
Exemple #16
0
class ClassesHandler(PermissionHandler, StarkHandler):

    def display_classes(self, obj, is_header, *args, **kwargs):
        if is_header:
            return '班级'
        return str(obj)

    def display_course_record(self, obj, is_header, *args, **kwargs):
        if is_header:
            return '上课记录'
        class_course_record_url = name2url(self.site.namespace, 'academy_courserecord_list', classes_id=obj.pk)
        return mark_safe("<a target='_blank' href='%s'>上课记录</a>" % (class_course_record_url))

    def display_homework(self, obj, is_header, *args, **kwargs):
        if is_header:
            return '班级作业'
        new_url = name2url(self.site.namespace, 'academy_homework_list', classes_id=obj.pk)
        return mark_safe("<a target='_blank' href='%s'>班级作业</a>" % new_url)

    def get_queryset(self, request, *args, **kwargs):
        user_id = request.session['user_info']['id']
        id_queryset = UserInfo.objects.filter(id=user_id).first().roles.all().values_list('id')
        user_role_id_list = [item[0] for item in id_queryset]
        if 10 in user_role_id_list:  #该用户是老师
            return UserInfo.objects.filter(id=user_id).first().classes.all()
        return super().get_queryset(request, *args, **kwargs)


    model_form_class = ClassesModelForm
    list_display = ['school', display_classes, get_m2m_text('老师', 'teacher'), 'price', get_datetime_text('开班日期', 'start_date'),
                    display_course_record, display_homework]
    search_group = [Option('course')]
Exemple #17
0
class UserInfoHandler(StarkHandler):

    # 定制页面显示的列
    list_display = [
        StarkHandler.display_checkbox, 'id', 'name',
        get_choice_text('性别', 'gender'),
        get_choice_text('班级', 'classes'), 'age', 'email', 'depart',
        StarkHandler.display_edit, StarkHandler.display_del
    ]

    per_page_count = 10  # 每页显示数据个数
    has_add_btn = True  # 是否显示添加按钮

    order_list = ['id']  # 数据排序方式

    # 姓名中或邮箱中含有关键字 不加__contains就是精确查找
    search_list = ['name__contains', 'email__contains']

    action_list = [StarkHandler.action_multi_delete]  # 批量删除

    # model_form_class = UserInfoModelForm      #   自定制 添加/编辑 页面显示的字段
    # def save(self, form, is_update=False):
    #     form.instance.depart_id = 1
    #     form.save()

    search_group = [
        Option('gender', is_multi=True),
        MyOption('depart', db_condition={'id__gt':
                                         2}),  # db_condition:ORM的筛选条件

        # Option('gender', text_func=lambda field_object: '666' )
    ]
Exemple #18
0
class ClassListHandler(StarkHandler):
    """
    班级模型视图函数处理类
    """

    # 页面显示课程信息
    def display_course(self, obj=None, is_header=None):
        """
        页面显示课程信息
        :param obj:
        :param is_header:
        :return:
        """
        if is_header:
            return '班级'
        return '%s %s期' % (obj.course.name, obj.semester)

    # 页面显示上课记录
    def display_course_record(self, obj=None, is_header=None, *args, **kwargs):
        """
        页面显示上课记录
        :param obj:
        :param is_header:
        :param args:
        :param kwargs:
        """
        if is_header:
            return '上课记录'
        record_url = reverse('stark:web-courserecord-list',
                             kwargs={'class_id': obj.pk})
        return mark_safe('<a target="_blank" href="%s">查看上课记录</a>' % \
                         record_url)

    display_list = [
        'school',
        display_course,
        'price',
        get_datetime_text('开班日期', 'start_date'),
        'class_teacher',
        get_m2m_text('任课老师', 'tech_teachers'),
        display_course_record,
    ]
    model_form_class = ClassListModelForm
    search_group = [
        Option('school'),
        Option('course'),
    ]
Exemple #19
0
class StudentHandler(StarkHandler):
    """
    学员相关视图函数处理类
    """

    # 页面显示积分记录
    def display_score_record(self, obj=None, is_header=None, *args, **kwargs):
        """
        页面显示积分记录
        :param obj:
        :param is_header:
        :parma args:
        :param kwargs:
        :return:
        """
        if is_header:
            return '积分管理'
        score_url = reverse('stark:web-scorerecord-list',
                            kwargs={'student_id': obj.pk})
        return mark_safe('<a target="_blank" href="%s">%s</a>' %
                         (score_url, obj.score))

    def get_add_btn(self, request, *args, **kwargs):
        return None

    def get_display_list(self):
        value = []
        if self.display_list:
            value.extend(self.display_list)
            value.append(type(self).display_edit)
        return value

    def get_urls(self):
        patterns = [
            url(r'^list/$',
                self.wrapper(self.list_view),
                name=self.get_list_url_name),
            # url(r'^add/$', self.wrapper(self.add_view),
            #     name=self.get_add_url_name),
            url(r'^edit/(?P<pk>\d+)/$',
                self.wrapper(self.edit_view),
                name=self.get_edit_url_name),
            # url(r'^del/(?P<pk>\d+)/$', self.wrapper(self.del_view),
            #     name=self.get_del_url_name),
        ]
        patterns.extend(self.extra_urls())
        return patterns

    display_list = [
        'customer', 'qq', 'mobile', 'emergency_contract',
        get_m2m_text('已报班级', 'class_list'), display_score_record,
        get_choice_text('状态', 'student_status')
    ]
    model_form_class = StudentModelForm
    search_list = ['customer__name', 'qq', 'mobile']
    search_group = [
        Option('class_list',
               text_func=lambda x: '%s-%s' % (x.school.title, str(x)))
    ]
Exemple #20
0
class StudentHandler(PermissionHandler, StarkHandler):
    model_form_class = StudentModelForm

    def display_score(self, obj=None, is_header=None, *args, **kwargs):
        """新加一列"""
        if is_header:
            return '积分管理'
        # 反向取url
        record_url = reverse('stark:web_scorerecord_list',
                             kwargs={'student_id': obj.pk})

        return mark_safe('<a target="_blank" href="%s">%s</a>' %
                         (record_url, obj.score))

    list_display = [
        'customer', 'qq', 'mobile', 'emergency_contract',
        get_m2m_text('已报名班级', 'class_list'), display_score,
        get_choice_text('状态', 'student_status')
    ]  # 自定义显示

    def get_add_btn(self, request, *args, **kwargs):
        """重构隐藏, 添加按钮"""
        return None

    def get_list_display(self, request, *args, **kwargs):
        """重构:只需要修改按钮"""
        value = []
        if self.list_display:
            value.extend(self.list_display)
            value.append(type(self).display_edit)
        return value

    def get_urls(self):
        """重构url ,值需要列表功能"""
        patterns = [
            url(r'^list/$',
                self.wrapper(self.changelist_view),
                name=self.get_list_url_name),
            url(r'^change/(?P<pk>\d+)/$',
                self.wrapper(self.change_view),
                name=self.get_change_url_name),
        ]

        patterns.extend(self.extra_urls())
        return patterns

    # 模糊搜索
    search_list = [
        'customer__name',
        'qq',
        'mobile',
    ]
    # 组合搜索
    search_group = [
        Option('class_list',
               text_func=lambda x: '%s-%s' %
               (x.school.title, str(x)))  # 利用text_func添加一个lambda函数处理显示字符串
    ]
Exemple #21
0
class CourseRecordHandler(PermissionHandler, StarkHandler):
    # 老师查看或添加自己某个学生所有的课堂反馈
    search_group = [Option('status')]
    model_form_class = CourseRecordModelForm
    list_display = [
        'student', 'course', 'record_num',
        get_datetime_text('上课时间', 'date'),
        get_choice_text('状态', 'status')
    ]

    def display_edit(self, obj=None, is_header=None, *args, **kwargs):
        """
        自定义页面显示的列(表头和内容)
        :param obj:
        :param is_header:
        :return:
        """
        if is_header:
            return "编辑"
        return mark_safe('<a href="%s">编辑</a>' % self.reverse_change_url(
            pk=obj.pk, student_id=kwargs['student_id']))

    def get_urls(self):
        patterns = [
            re_path(r'^list/(?P<student_id>\d+)$',
                    self.wrapper(self.changelist_view),
                    name=self.get_list_url_name),
            re_path(r'^add/(?P<student_id>\d+)$',
                    self.wrapper(self.add_view),
                    name=self.get_add_url_name),
            re_path(r'^change/(?P<student_id>\d+)/(?P<pk>\d+)/$',
                    self.wrapper(self.change_view),
                    name=self.get_change_url_name),
        ]

        return patterns

    def display_edit_del(self, obj=None, is_header=None, *args, **kwargs):
        if is_header:
            return '操作'

        tpl = '<a href="%s">反馈详细信息</a>' % (self.reverse_change_url(
            pk=obj.pk, student_id=kwargs['student_id']))
        return mark_safe(tpl)

    def get_queryset(self, request, *args, **kwargs):
        return self.model_class.objects.filter(student_id=kwargs['student_id'])

    def save(self, request, form, is_update, *args, **kwargs):
        if form.instance.status == settings.RECORD_CHECKED:
            return HttpResponse("已审核过的课堂反馈不可以被修改!")
        if is_update:
            form.instance.status = settings.RECORD_UNCHECKED

        form.instance.student_id = kwargs['student_id']
        form.instance.teacher_id = request.session['user_id']
        form.save()
Exemple #22
0
class ProjectHandler(StarkHandler):
    search_list = ['title__contains', 'sever__contains', 'status__contains']
    # 定制页面显示的列
    list_display = [
        StarkHandler.display_checkbox,  # 批量删除操作选择框
        'title',  # 字段
        get_choice_text('状态', 'status'),  # 选择项字段
        'server',
        StarkHandler.display_edit,  #  添加编辑按钮
        StarkHandler.display_del
    ]  #  添加删除按钮
    action_list = [
        StarkHandler.action_multi_delete,
    ]
    search_group = [
        Option('status', is_multi=True),
        Option('server', db_condition={'id__gt': 0}),
    ]
Exemple #23
0
class UserInfoHandler(StarkHandler):

    # 定制页面显示的列
    list_display = [
        StarkHandler.display_checkbox,  # 批量删除操作选择框
        'name',  # 字段
        get_choice_text('性别', 'gender'),  # 选择项字段
        'age',
        'email',
        'depart',
        StarkHandler.display_edit,  #  添加编辑按钮
        StarkHandler.display_del
    ]  #  添加删除按钮

    per_page_count = 10  # 自定制每页显示的条数
    has_add_btn = True  # 自定制是否显示添加按钮
    # model_form_class = UserInfoModelForm   # 如果需要添加数据库没有的字段,可用UserInfoModelForm类自定制

    order_list = ['-age']  # 设置列表页按哪个字段排序排序

    # 姓名中含有关键字或邮箱中含有关键字
    search_list = ['name__contains', 'email__contains']

    action_list = [
        StarkHandler.action_multi_delete,
    ]

    # def save(self, form, is_update=False):
    #     """
    #     用于自定义可编辑字段时,某些存在于数据库却没有在编辑页显示的字段,在这里进行默认赋值
    #     :param form:
    #     :param is_update:
    #     :return:
    #     """
    #     form.instance.depart_id = 1
    #     form.save()

    # 按照表中choice字段和外键进行快速筛选
    search_group = [
        Option('gender', is_multi=True),  # choice字段
        Option('depart', db_condition={'id__gt': 0}),  #  外键
        # MyOption('depart', {'id__gt': 2}),
        # Option('gender', text_func=lambda field_object: field_object[1] + '666'),
    ]
class StudentHandler(StarkHandler):
    model_form_class = StudentModelForm
    list_display = [
        'customer', 'qq', 'mobile', 'emergency_contract',
        get_m2m_text('已报班级', 'class_list'),
        get_choice_text('状态', 'student_status')
    ]

    has_add_btn = False

    def get_list_display(self):
        """
		获取页面上应该显示的列,预留的自定义扩展,例如:以后根据用户角色的不同展示不同的列
		:return:
		"""
        value = []
        if self.list_display:
            value.extend(self.list_display)
            value.append(type(self).display_edit)

        return value

    def get_urls(self):
        patterns = [
            url(r'^list/$',
                self.wrapper(self.changelist_view),
                name=self.get_list_url_name),
            # url(r'^add/$', self.wrapper(self.add_view), name=self.get_add_url_name),
            url(r'^change/(?P<pk>\d+)/$',
                self.wrapper(self.change_view),
                name=self.get_change_url_name),
            # url(r'^delete/(?P<pk>\d+)/$', self.wrapper(self.delete_view), name=self.get_delete_url_name),
        ]
        patterns.extend(self.extra_urls())
        return patterns

    search_list = ['customer__name', 'qq', 'mobile']

    search_group = [
        Option('class_list',
               text_func=lambda x: '%s-%s' % (x.school.title, str(x))),
        Option('student_status')
    ]
Exemple #25
0
class UserInfoHandler(StarkHandler):
    def display_gender(self, obj=None, is_header=None):
        if is_header:
            return "性别"
        else:
            return obj.get_gender_display()

    list_display = [
        StarkHandler.display_checkbox, "name",
        get_choice_text("性别", "gender"),
        get_choice_text("年级", "classes"), display_gender, "age", "email",
        "depart", StarkHandler.display_edit, StarkHandler.display_del
    ]
    # per_page_count = 20
    per_page_count = 10
    # has_add_btn = False
    # model_form_class = UserInfoModelForm
    order_list = ['id']  # 排序,sql中的order

    # 姓名中含有关键字或者邮箱中含有关键字
    search_list = ["name__contains", "email__contains"]  # 模糊匹配

    # search_list = ["name", "email"] # 精确匹配
    # search_list = ["name__contains"]

    action_list = [
        StarkHandler.action_multi_delete,
    ]

    # def multi_init(self, request, *args, **kwargs):
    # multi_init.text = "批量处理"
    # action_list = [multi_delete, multi_init]
    # def save(self, form, is_update=False):
    #     form.instance.depart_id = 1
    #     form.save()

    search_group = [
        Option("gender", is_multi=True),
        Option("depart", db_condition={'id__gt': 2}),
        # Option("depart", {'id__gt': 1}),
        # Option("gender", text_func=lambda field_object: field_object[1]+'666'),
    ]
Exemple #26
0
class GoodsHandler(StarkHandler):
    list_display = [
        'id', 'name', 'gtype', 'unit', 'nickname', 'price', 'date', 'meno'
    ]
    search_group = [
        Option('gtype'),
    ]
    search_list = [
        'name__contains',
        'nickname__contains',
        'meno__contains',
    ]
class UserInfoHandler(StarkHandler):
    # per_page_num = 2
    # 定制页面的列
    list_display = [
        StarkHandler.display_checkbox,
        'name',
        get_choice_text('性别', 'gender'),
        get_choice_text('班级', 'classes'),
        # 'gender','classes',
        'age',
        'email',
        'depart',
        StarkHandler.display_edit,
        StarkHandler.display_del
    ]
    has_add_btn = True

    # 在stark/service/v1 下面定义了一个model_form_class的None,就是为了可以自定义自己的ModelForm
    model_form_class = UserInfoModelForm

    # order_list = ['name']

    # 姓名中含有关键字或邮箱中含有关键字 如果没有 __contains 就算精确查找
    search_list = ['name__contains', 'email__contains']

    # 批量操作的选项 。 如果没有值,那么页面就不显示
    action_list = [
        StarkHandler.action_multi_delete, StarkHandler.action_depart_multi_init
    ]  # 具有什么批量操作的功能

    # 组合搜索
    # search_group = ['gender','depart']
    search_group = {
        Option('gender'),
        Option('depart', is_multi=True, db_condition={'id__gt': 0}),
        Option('classes', is_multi=True, db_condition={'id__gt': 0}),
        # MyOption('depart',{'id__gt': 2}),
    }
Exemple #28
0
class UserInfoHandler(StarkHandler):
    label_name = [
        'realname',
        get_choice_text('性别', 'gender'), 'phone', 'email', 'depart',
        StarkHandler.display_reset_pwd
    ]
    search_list = ['realname__contains']
    search_group = [
        Option('gender', is_multi=False),
        Option('depart', is_multi=False)
    ]

    def get_model_form_class(self, request, is_add=False, *args, **kwargs):
        if is_add:
            return UserInfoAddModelForm
        return UserInfoChangeModelForm

    def extra_urls(self):
        patterns = [
            url(r'reset/pwd/(?P<id>\d+)/$',
                self.wrapper(self.reset_pwd),
                name=self.get_reset_pwd_url_name),
        ]
        return patterns
Exemple #29
0
class StudentHandler(PermissionHandle, StarkHandler):
    def display_score(self, obj=None, is_header=None, *args, **kwargs):
        if is_header:
            return '积分管理'
        score_url = reverse('stark:web_scorerecord_list',
                            kwargs={'student_id': obj.pk})

        return mark_safe('<a href="%s">%s</a>' % (score_url, obj.score))

    def get_urls(self):
        patterns = [
            url(r'^list/$',
                self.wrapper(self.list),
                name=self.get_list_url_name),
            url(r'^change/(?P<id>\d+)/$',
                self.wrapper(self.change),
                name=self.get_change_url_name),
        ]
        patterns.extend(self.extra_urls())
        return patterns

    def get_label_name(self, request, *args, **kwargs):
        '''
        为以后的扩展预留,根据不同的情况显示不同的内容(列)
        :return:
        '''
        value = []
        value.extend(self.label_name)
        if self.label_name:
            value.append(type(self).display_change)
        return value

    has_add_btn = False
    label_name = [
        'customer', 'qq', 'mobile', 'emergency_contract',
        get_mtom_text('班级', 'class_list'),
        get_choice_text('状态', 'student_status'), display_score
    ]
    search_list = ['customer__name', 'qq', 'mobile']

    search_group = [
        Option('class_list',
               text_func=lambda x: '%s-%s' % (x.school.title, str(x)))
    ]
    model_form_class = StudentModelForm
Exemple #30
0
class UserinfoHandler(PermissionHandler,StarkHandler):

    def display_reset_pwd(self, obj=None, is_header=None):
        if is_header:
            return '重置密码'
        return mark_safe('<a href="%s">重置密码</a>' % self.reverse_reset_pwd_url(pk=obj.pk))

    search_group = [
        Option(field='gender'),
    ]
    search_list = ['nickname__contains', 'name__contains']
    list_display = ['nickname', get_choice_text('性别', 'gender'), 'phone', 'email', 'depart', display_reset_pwd]

    def reset_pwd(self, request, pk):
        if request.method == 'GET':
            return render(request, 'stark/delete.html', {'msg': '重置密码', 'cancel': self.reverse_list_url()})
        user_obj = models.UserInfo.objects.filter(id=pk).first()
        if not user_obj:
            return HttpResponse('用户不存在')
        user_obj.password = '******'
        user_obj.save()
        return redirect(self.reverse_list_url())

    def reverse_reset_pwd_url(self, *args, **kwargs):
        return self.reverse_commons_url(self.get_reset_pwd_url_name, *args, **kwargs)

    @property
    def get_reset_pwd_url_name(self):
        return self.get_url_name('reset_pwd')

    def extra_urls(self):
        patterns = [url(r'^reset/password/(?P<pk>\d+)/$',
                        self.wrapper(self.reset_pwd),
                        name=self.get_reset_pwd_url_name)
                    ]
        return patterns

    def get_model_form_class(self, is_add, request, *args, **kwargs):
        if is_add:
            return UserInfoAddModelForm

        return UserInfoUpdateModelForm