def has_permission(self, request): """ 重载登陆后台权限设置 Return True if the given HttpRequest has permission to view """ s = get_setting() if s.enable_multi_user: # 启动了多用户管理系统, 用户具有staff权限可以登陆后台 return request.user.is_active and request.user.is_staff else: # 否则只有超级管理员有权限登陆后台 return request.user.is_superuser
def form_valid(self, form): # 通过表单验证 s = get_setting() # 网站一些配置信息 blog.models.Setting user = form.save(commit=False) if s.user_verify_email: # 用户注册需要验证邮箱, 需要启动celery的消息队列 code_str = self.generate_random_str() # 验证码 email = user.email # 收件方 task_obj = send_email_task.delay(email, code_str, self.send_type) # celery异步任务对象 # create里会进行save() EmailVerifyCode.objects.create(email=email, code=code_str, type=self.send_type, task_id=task_obj.task_id) user.is_active = False # 未激活 user.save() url = reverse('user:login') messages.success(self.request, '注册成功,前往邮箱激活') else: # 用户注册不需要验证邮箱 user.save() login(self.request, user) # 注册后的自动登录 url = reverse('blog:index') messages.success(self.request, '注册成功, 欢迎加入本博客系统') if s.enable_multi_user: try: # 添加一个组 res = Group.objects.get_or_create(name='register_user_group') register_user_group = res[0] # 添加一系列权限, 暂时就只给用户对自己文章的增删改查, view_model p1 = Permission.objects.get(codename='add_article') # 增 p2 = Permission.objects.get(codename='delete_article') # 删 p3 = Permission.objects.get(codename='change_article') # 改 p4 = Permission.objects.get(codename='view_article') # 查 register_user_group.permissions.add(p1, p2, p3, p4) # register_user_group.user_set.add(user) # 两种方式都可以加入组 user.groups.add(register_user_group) user.is_staff = True user.save() except Exception as e: logger.error(e) return HttpResponseRedirect(url)
def setting(requests): """ 自定义一些模板全局变量 """ s = get_setting() site = Site.objects.first() return { 'SITE_NAME': s.name, # 站点名称 'SITE_DESC': s.desc, # 站点描述 'SITE_KEYWORD': s.keyword, # 站点关键字 'SITE_URL': site.domain, 'ENABLE_PHOTO': s.enable_photo, # 是否启动相册 'nav_pages': Article.objects.filter(type='p'), # 所有需要导航的文章页面 'nav_category_list': Category.objects.all(), # 导航栏-> 所有分类,nav.html模板里调用 'top_categorys': Category.top_objects.all() # 对manager的应用,所有的一级分类 }
def form_valid(self, form): # 通过表单验证 s = get_setting() # 网站一些配置信息 blog.models.Setting user = form.save(commit=False) if s.user_verify_email: # 用户注册需要验证邮箱, 需要启动celery的消息队列 code_str = self.generate_random_str() # 验证码 email = user.email # 收件方 task_obj = send_email_task.delay(email, code_str, self.send_type) # celery异步任务对象 # create里会进行save() EmailVerifyCode.objects.create(email=email, code=code_str, type=self.send_type, task_id=task_obj.task_id) user.is_active = False # 未激活 user.save() url = reverse('user:login') messages.success(self.request, '注册成功,前往邮箱激活') else: # 用户注册不需要验证邮箱 user.save() login(self.request, user) # 注册后的自动登录 url = reverse('blog:index') messages.success(self.request, '注册成功, 欢迎加入本博客系统') # TODO: 多用户博客系统的权限控制 # 添加一个组 # res = Group.objects.get_or_create(name='register_user_group') # register_user_group = res[0] # # try: # p1 = Permission.objects.get(codename='view_category') # p2 = Permission.objects.get(codename='change_category') # p3 = Permission.objects.get(codename='add_category') # p4 = Permission.objects.get(codename='delete_category') # p5 = Permission.objects.get(codename='view_article') # p6 = Permission.objects.get(codename='change_article') # p7 = Permission.objects.get(codename='add_article') # p8 = Permission.objects.get(codename='delete_article') # register_user_group.permissions.add(p1, p2, p3, p4, p5, p6, p7, p8) # # register_user_group.user_set.add(user) # user.groups.add(register_user_group) # except: # pass return HttpResponseRedirect(url)
import random from django import template from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage from django.template.defaultfilters import stringfilter from django.utils.safestring import mark_safe from django.utils.timezone import now from blog.models import Article, Category, Link, SideBar, Tag, Comment from utils.get_setting import get_setting from utils.mistune_markdown import article_markdown as _article_markdown register = template.Library() # 名字是固定的register setting = get_setting() @register.inclusion_tag('blog/tags/article_info.html', takes_context=True) def inclusion_article_info_tag(context, article, is_index): """ 在首页index和 文章详情页detail里使用,用于加载文章info is_index 是否首页列表页, 首页加载只显示摘要 inclusion_tag里好像无法获取到 模板全局变量 """ return { 'article': article, 'user': context['user'], 'is_index': is_index, 'ARTICLE_DESC_LEN': setting.article_desc_len # 文章摘要长度, 用于index页面 }