您的位置:首页 > 编程语言 > Go语言

Django框架之views(业务逻辑)简单后台首页展示的业务逻辑详细描述

2017-08-05 14:09 537 查看
此代码需要与前端代码配合使用...全能小王子啊!!!

但是因为前端代码过多,我就不放这里展示了,我看着头都大....

废话不多说,直接上代码,出自本人笔记,仅供参考,若觉得没有参考价值,请自寻更好学习方案!!!

from django.shortcuts import render,HttpResponse,HttpResponseRedirect

import models

from django.db.models import Q  # 模糊查询使用的对象

from django.core.paginator import Paginator,InvalidPage,EmptyPage,PageNotAnInteger    # 分页使用的类和异常处理的包

from django.contrib import auth      # 登录,退出,验证使用的包

from django.contrib.auth.decorators import login_required       # 防止未登录就直接访问后台页面使用的包

from django.contrib.auth.models import User        # 引入用户表

from django.contrib.auth.hashers import make_password    # 密码加密使用的包

import os

import uuid   # 生成唯一标识符

# 显示数据库内容业务逻辑函数

@login_required       # 防止未登录而直接访问后台页面

def manage(request):

    stus = models.Student.objects.all()   # 获取数据库所有行的数据

    #  根据搜索框的name获取到,

    search = request.GET.get('search', None)   # 获取搜索框的name

    order = request.GET.get('order', None)  # 通过什么字段来排序

    rule = request.GET.get('rule', None)   # 排序方式

    pn = request.GET.get('pn',1)  # 分页使用变量

   # GET方式获取,来处理搜索功能

   try:

        if search is not None:

            # 一个Q就是一个条件,然后用并集操作符连接

            condition = Q(name__icontains=search) | Q(score__icontains=search) | Q(age__icontains=search) | Q(

                email__icontains=search) | Q(cls__name__icontains=search)

            stus = models.Student.o
4000
bjects.filter(condition)

    else:  # 没有搜索条件就默认显示所有

             stus = models.Student.objects.all()

   except Exception as e:

          print e

   # 排序规则的业务逻辑部分

   if order:

          if rule == 'u':   # 升序排序

              stus = stus.order_by(order)

          else:      # 降序排序

              stus = stus.order_by(order).reverse()

   

   # 分页规则的业务逻辑部分

   # 分页返回的值是unicode转成int

    try:

        pn = int(pn)

    except Exception as e:

        pn = 1

    # 从客户端浏览器中读取每页显示记录条数的cookie值,如果没有输入则默认为5

    per_page = request.COOKIES.get('per_page',5)

    # 分页功能处理

    try:

        paginator = Paginator(stus,per_page)    # 返回一个分页对象,p1:queryset,p2:每页记录条数

        stus = paginator.page(pn)  # 获取某一页的记录

    except(InvalidPage,EmptyPage,PageNotAnInteger) as e:

        pn = 1

        stus = paginator.page(pn)  # 获取某一页的记录

        print e

    num_pages = stus.paginator.num_pages    # 获取总页数

    if num_pages<5:         # 如果最大页数小于你想要显示的数字

        start = 1

        end = num_pages+1

    else:

        if pn <= 2:  # 页数左边界

            start = 1

            end = 6

        elif pn>=num_pages-2:  # 页数右边界

            start = num_pages-4

            end = num_pages + 1

        else:      # 页数不触及边界的情况

            start = pn-2

            end = pn+3

    # 分页数字生成

    page_nums = range(start,end)

    # 返回响应

    return render(request,'pro01/manage.html',{'stus':stus,'index':'active','page_nums':page_nums})
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: