第八节:后台管理

后台管理

本功能需求:

-展示登录用户的所有文章

-文章新增(防止xss攻击)

-文章新增时支持上传图片

拓展需求:

-修改个人信息(包括头像,密码,站点背景)

-使用md编辑器上传文章

-文章编辑

-文章删除

一、添加路由

后台管理urls.py

    path('backend/', views.backend, name='backend')

后台添加文章 urls.py

    path('add_article/', views.add_article, name='add_article')

文本编辑器上传图片 urls.py

    path('upload_img/', views.upload_img, name='upload_img')

二、添加视图函数

在views.py中添加

后台管理 视图函数 backend

def backend(request):
    article_num = models.Article.objects.filter(blog=request.user.blog).count()
    category_num = models.Category.objects.filter(blog=request.user.blog).count()
    tag_num = models.Tag.objects.filter(blog=request.user.blog).count()
    article_list = models.Article.objects.filter(blog=request.user.blog)
    page_num_int = int(request.GET.get('page', 1))
    paginator = Paginator(article_list, 10)
    if paginator.num_pages > 9:
        if page_num_int - 4 < 1:
            page_range = range(1, 9)
        elif page_num_int + 4 > paginator.num_pages:
            page_range = range(paginator.num_pages - 8, paginator.num_pages + 1)
        else:
            page_range = range(page_num_int - 4, page_num_int + 4)
    else:
        page_range = paginator.page_range
    page = paginator.page(page_num_int)
    category_list = models.Category.objects.filter(blog=request.user.blog)
    tag_list = models.Tag.objects.filter(blog=request.user.blog)
    start = 1
    end = paginator.num_pages
    blog = request.user.blog
    category_list = models.Category.objects.filter(blog=blog)
    tag_list = models.Tag.objects.filter(blog=blog)
return render(request, 'user/Backend.html', locals())

后台添加文章 视图函数add_article

@login_required(login_url='/login/')
def add_article(request):
    res = {'code': 100, 'msg': '发布成功'}
    if request.method == 'POST':
        title = request.POST.get('title')
        content = request.POST.get('html_doc')
        markdown = request.POST.get('mark_doc')
        category = request.POST.get('category')
        tags = request.POST.get('tags')
        head_img = request.FILES.get('head_img')
        tags1 = tags.split(',')
        soup = BeautifulSoup(content, 'html.parser')
        description = soup.text[0:120]
        res_script = soup.find_all('script')
        for script in res_script:
            script.decompose()
        article = models.Article.objects.create(
            title=title,
            blog=request.user.blog,
            description=description,
            content=str(soup),
            markdown=markdown,
            category_id=category,
            head_img=head_img
        )
        ll = []
        for tag in tags1:
            ll.append(models.Tag2Article(article_id=article.pk, tag_id=tag))
        models.Tag2Article.objects.bulk_create(ll)
        return JsonResponse(res)

上传图片视图函数 upload_img(使用md编辑器)

@login_required(login_url='/login/')
def upload_img(request):
    img_obj = request.FILES.get('editormd-image-file')
    img = Image.open(img_obj)
    uid = ''.join(str(uuid.uuid4()).split('-'))[::4]
    tmp = img_obj.name.rsplit('.', 1)[-1]
    t = str(time.time()).split('.')
    img_name = ''.join([t[0], t[-1], '_', uid, '.', tmp])
    img.save('media/article_img/' + img_name)
    return JsonResponse({'success': 1, 'msg': '上传成功', 'url': f"/media/article_img/{img_name}"})

三、后台管理功能涉及的模型层操作

后台管理主要是涉及添加文章,以及上传文章中的图片,所以主要操作文章表Article

后台管理功能还涉及到修改用户的个人信息,所以也会操作UserInfo表

四、后台管理前端模板

后台管理页面前端

在templates文件夹中的user文件夹中新建Backend.html(也要继承基础模板base.html)

联系管理员微信tutu19192010,注册账号

上一篇
下一篇
Copyright © 2022 Egon的技术星球 egonlin.com 版权所有 帮助IT小伙伴学到真正的技术