Django 过滤及错误页面展示

Django 过滤

创建项目 test 并完成项目配置后,创建应用 student ,进入 models.py ,建立模型,输入代码如下:

from django.db import models
from grade.models import Grade


class Student(models.Model):
    stu_name = models.CharField(max_length=10)
    stu_sex = models.BooleanField()
    stu_birth = models.DateField()
    stu_create_time = models.DateTimeField(auto_now_add=True)
    stu_operate_time = models.DateTimeField(auto_now=True)
    stu_chinese = models.DecimalField(max_digits=3, decimal_places=1)
    stu_math = models.DecimalField(max_digits=3, decimal_places=1)
    g = models.ForeignKey(Grade, null=True)  # 设置外键

    class Meta:
        db_table = 'stu'


class StudentInfo(models.Model):
    stu_addr = models.CharField(max_length=20)
    stu_age = models.IntegerField()
    stu = models.OneToOneField(Student, on_delete=models.CASCADE)  # 一对一关系

    class Meta:
        db_table = 'stu_info'

所谓过滤,即将我们需要的信息提取出来,展示到前端页面,我们在 templates 文件夹下建立 sel_student.html 文件,代码如下:

{% for stu in stus %}
     id: {{ stu.stu_id }}
     姓名:{{ stu.stu_name }}
     生日:{{ stu.stu_birth }}
     电话:{{ stu.stu_tel }}
     <br>
 {% endfor %}

views.py 添加代码如下:

from django.db.models import F, Q
from django.shortcuts import render

from stu.models import Student


def select_stu(request):
    # 查询数据
    # stus = Student.objects.all()

    # 查询所有女生
    # stus = Student.objects.get(stu_sex=0)
    # stus = Student.objects.filter(stu_sex=0)
    # return render(request, 'sel_stu.html', {'stus': stus})

    # 查询id从大到小的排序
    # stus = Student.objects.all().order_by('-id')

    # 查询id最大的一条数据
    # stus = Student.objects.all().order_by('-id').first()

    # 查询id最小的一条数据
    # stus = Student.objects.all().order_by('-id').last()

    # 获取男生的数据个数
    # stus = Student.objects.filter(stu_sex=True).count()
    # print(stus)

    # 查询所有80后女生姓名
    # stus = Student.objects.filter(stu_sex=False).\
    #     filter(stu_birth__gte='1980-01-01').\
    #     filter(stu_birth__lt='1990-01-01')

    # 查询姓李的数据
    # stus = Student.objects.filter(stu_name__startswith='李')

    # 查询姓姓名以华结束的数据
    # stus = Student.objects.filter(stu_name__endswith='华')

    # 姓名中包含李的数据
    # stus = Student.objects.filter(stu_name__contains='李')

    # 判断是否存在张三
    # stus = Student.objects.filter(stu_name='张三').exists()
    # print(stus)

    # 获取指定多个id的值
    # ids = [1, 2]
    # stus = Student.objects.filter(id__in=ids)

    # 查询语文成绩大于等于数学成绩的学生
    # stus = Student.objects.filter(stu_chinese__gte=F('stu_math'))

    # 查询语文成绩超过数学成绩10分的学生
    # stus = Student.objects.filter(stu_chinese__gte=F('stu_math') + 10)

    # 查询学生姓名不叫李白的,或者语文成绩大于80分的学生
    # ~代表非
    stus = Student.objects.filter(~Q(stu_name='李白') | Q(stu_chinese__gt=80))
    # 返回给前端
    return render(request, 'sel_stu.html', {'stus': stus})

以上展示了一些常用的过滤语句,下面罗列一些知识点:

  • objects 对象
    通过 模型名.objects 来实现数据的 CRUD 操作

  • 获取所有学生
    MySQL语句表示方式:select * from student
    Django语句表示方式:模型名.objects.all()

  • 常用词汇:

get:返回一个满足条件的对象,没有满足条件的则直接报DoesNotExit的异常,如果查询结果有多个数据的话,就报MulitiObjectsReturned

filter:返回所有满足条件的对象

first():返回第一条数据

last():返回最后一条数据

count():求和

delete():删除数据

gt / gte:大于 大于等于

lt / lte:小于 小于等于

错误页面展示

在用户访问页面过程中,时常会遇到页面报错,如何将页面报错友好的展示给用户,就是我们下面要说的。

错误页面分两种,一种是 404错误页面,404页面是客户端在浏览网页时,服务器无法正常提供信息,或是服务器无法回应,且不知道原因所返回的页面。一种是 500错误页面,造成500错误原因多种多样,这里就不一一赘述。

首先,我们在 templates 文件夹下创建 404.html500.html 两个文件,在 404.html 添加代码如下:


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>404错误页面title>
head>
<body>
<h1>我是400错误页面h1>
body>
html>

在 500.html 添加代码如下:


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>500错误页面title>
head>
<body>
<h1>我是500错误页面h1>
body>
html>

student 目录下 views.py 添加代码如下:

def page_not_found(request):
    return render(request, '404.html')


def server_error(request):
    return render(request, '500.html')

你可能感兴趣的:(python,Django,学习,语言)