Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
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的应用,所有的一级分类
    }
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
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页面
    }