import smtplib from django.conf import settings from django.core.exceptions import PermissionDenied from django.core.mail import send_mass_mail, send_mail from django.http import HttpResponseBadRequest, HttpResponse from django.shortcuts import * from django.utils.html import strip_tags from django.views.generic import View def get_page_list(paginator, page): """ 分页逻辑 if 页数>=10: 当前页<=5时,起始页为1 当前页>(总页数-5)时,起始页为(总页数-9) 其他情况 起始页为(当前页-5) """ page_list = [] if paginator.num_pages > 10: if page.number <= 5: start_page = 1 elif page.number > paginator.num_pages - 5: start_page = paginator.num_pages - 9 else: start_page = page.number - 5 for i in range(start_page, start_page + 10): page_list.append(i) else: for i in range(1, paginator.num_pages + 1): page_list.append(i) return page_list def ajax_required(f): """Not a mixin, but a nice decorator to validate than a request is AJAX""" def wrap(request, *args, **kwargs): if not request.is_ajax(): return HttpResponseBadRequest() return f(request, *args, **kwargs) wrap.__doc__ = f.__doc__ wrap.__name__ = f.__name__ return wrap def send_html_email(subject, html_message, to_list): plain_message = strip_tags(html_message) from_email = settings.EMAIL_HOST_USER send_mail(subject, plain_message, from_email, to_list, html_message=html_message) def send_email(subject, content, to_list): """ Example: subject = 'test subject' content = 'hello, this is content' to_list = ['abc@qq.com','abcd@163.com'] send_email(subject, content, to_list) """ try: message = (subject, content, settings.EMAIL_HOST_USER, to_list) # do not forget set password print("--> is sending email") send_mass_mail((message,)) except smtplib.SMTPException: print("--> send fail") return HttpResponse("fail") else: print("--> send success") return HttpResponse("success") class AuthorRequiredMixin(View): def dispatch(self, request, *args, **kwargs): obj = self.get_object() if obj != self.request.user: raise PermissionDenied return super().dispatch(request, *args, **kwargs) class AdminUserRequiredMixin(View): """ 管理员拦截器 """ def dispatch(self, request, *args, **kwargs): if not self.request.user.is_staff: return redirect('myadmin:login') return super().dispatch(request, *args, **kwargs) class SuperUserRequiredMixin(View): """ 超级用户拦截器 """ def dispatch(self, request, *args, **kwargs): if not self.request.user.is_superuser: return HttpResponse('无权限') return super().dispatch(request, *args, **kwargs)