import json from django.contrib.auth.decorators import login_required from django.core import serializers from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage from django.http import JsonResponse, HttpResponseRedirect from django.shortcuts import render from blog.views import get_record_and_tags from system.error.ServerException import ServerException from blog import models from blog.controller import article @login_required(login_url='/') def category(request): # page: int = -1, is_paginator: bool = False, search_name: str = None if request.method == 'GET': page = request.GET.get('page') if page is None: page = 1 else: page = int(page) search_name = request.GET.get('search_name') if search_name is None: category = models.Category.objects.all().values('id', 'name','seq') else: category = models.Category.objects.filter(name__contains=search_name).values('id', 'name','seq') if page <= 0: page = 1 paginator = Paginator(category, 15) try: category = paginator.page(page) except PageNotAnInteger: category = paginator.page(1) except EmptyPage: category = paginator.page(paginator.num_pages) return render(request, 'management/category/category.html', context={'category': category}) def current_category(request, name): category_obj = models.Category.objects.get(name=name) page = request.GET.get('page') if page is None: page = 0 result = get_record_and_tags() context = {'current_category': category_obj.name, 'articles': article.get_article(is_paginator=True, page=int(page), category=category_obj), 'records': result['records'], 'tags': result['tags'] } return render(request, 'category.html', context=context) @login_required(login_url='/') def get_all_category(request): category = serializers.serialize("json", models.Category.objects.all()) return JsonResponse(json.loads(category), safe=False) @login_required(login_url='/') def add_category(request): if request.method == 'POST': category_name = request.POST.get("category_name") seq = request.POST.get("seq") if category_name == '': return HttpResponseRedirect('/management/category') else: obj = models.Category(name=category_name, seq=int(seq)) obj.save() return HttpResponseRedirect('/management/category') else: raise ServerException("错误的请求") @login_required(login_url='/') def delete_category(request): if request.method == 'GET': ids_str = request.GET.get("id") models.Category.objects.get(id=int(ids_str)).delete() return HttpResponseRedirect('/management/category') # 跳转到主界面 else: raise ServerException("错误的请求")