前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django实战-信息资讯-轮播图管理

Django实战-信息资讯-轮播图管理

作者头像
小团子
发布2019-07-23 10:38:02
9060
发布2019-07-23 10:38:02
举报
文章被收录于专栏:数据云团数据云团

Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。

对不同应用的管理,可以将用户分为不同类别的组,这样就能便于不同应用的 model 的数据管理。

代码语言:javascript
复制
request.user.has_perms('<app_name>.<codename>')

判断是否拥有某个权限。权限参数是一个字符串,格式是app_name.codename。判断user.permissions下有没有这个权限:有, 返回True;没有, 判断所属组下有没有这个权限。

代码语言:javascript
复制
content_type = ContentType.objects.get_for_model(model)
permissions = Permission.objects.filter(content_type=content_type)

① 自定义权限限定装饰器

代码语言:javascript
复制
from django.contrib.auth.models import Permission, ContentType
from django.http import Http404

如果拥有,那么就可以进入到指定的视图函数中,如果不拥有,那么就会报一个404错误。

代码语言:javascript
复制
def permission_required(model):
    def decorator(viewfunc):
        @wraps(viewfunc)
        def _wrapper(request, *args, **kwargs):
            content_type = ContentType.objects.get_for_model(model)
            permissions = Permission.objects.filter(content_type=content_type)
            codenames = [content_type.app_label + "." + permission.codename for permission in permissions]
            # result = request.user.has_perms(permissions)
            # result = request.user.has_perms(['news.add_news', 'news.change_news', 'news.delete_news'])
            # has_perms只能采用字符串的形式判断
            # 字符串的形式为 app_label.codename
            result = request.user.has_perms(codenames)
            if result:
                return viewfunc(request, *args, **kwargs)
            else:
                raise Http404()
        return _wrapper
    return decorator

② 轮播图管理页

代码语言:javascript
复制
@permission_required(Banner)
def banners(request):
    return render(request, 'cms/banners.html')

③ 轮播图列表

代码语言:javascript
复制
@permission_required(Banner)
def banner_list(request):
    # values 返回的还是QuerySet
    # 只不过在QuerySet中, 有的不是模型了,而是字典
    banners = list(Banner.objects.all().values())
    return restful.result(data={"banners": banners })

④ 添加轮播图

代码语言:javascript
复制
@permission_required(Banner)
def add_banner(request):
    form = AddBannerForm(request.POST)
    if form.is_valid():
        image_url = form.cleaned_data.get('image_url')
        link_to = form.cleaned_data.get('link_to')
        priority = form.cleaned_data.get('priority')
        banner = Banner.objects.create(image_url=image_url, link_to=link_to, priority=priority)
        return restful.result(data={"banner_id": banner.pk})
    else:
        return restful.params_error(message=form.get_error())

⑤ 删除轮播图

代码语言:javascript
复制
@permission_required(Banner)
def delete_banner(request):
    banner_id = request.POST.get('banner_id')
    Banner.objects.filter(pk=banner_id).delete()
    return restful.ok()

⑥ 修改轮播图

代码语言:javascript
复制
@permission_required(Banner)
def edit_banner(request):
    form = EditBannerForm(request.POST)
    if form.is_valid():
        pk = form.cleaned_data.get('pk')
        image_url = form.cleaned_data.get('image_url')
        link_to = form.cleaned_data.get('link_to')
        priority = form.cleaned_data.get('priority')
        Banner.objects.filter(pk=pk).update(image_url=image_url, link_to=link_to, priority=priority)
        return restful.ok()
    else:
        return restful.params_error(message=form.get_error())
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ① 自定义权限限定装饰器
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档