Django学习---Day2-Django 模型字段的优化

Django学习第2天(03)


目录

  • 在stu中的views.py定义一个添加学生方法
  • 在templates模板中的新建一个index.html文件
  • 调试代码的一种方法
  • 在views.py定义添加完整学生信息的2中方法
  • 获取所有学生信息

在stu中的views.py定义一个添加学生方法

from django.http import HttpResponse
from django.shortcuts import render

# Create your views here.

# 添加学生信息
def add_stu(request):
    # 在方法种可以定义是get请求,还是post请求,
    # 这里需要post提交请求
    # 如果是get请求,返回index页面
    if request.method == 'GET':
        return render(request, 'index.html')
    # return HttpResponse('hello, blonde girl!')
    # 如果是post请求,则提交信息,在需要处理请求
    if request.method == 'POST':
        # 处理请求,处理提交的学生信息
        print(request)
        #上面返回的是---<WSGIRequest: POST '/stu/add_stu/'>
        print(request.POST)
        #上面返回的是一个字典---<QueryDict: {'name': ['刘明湘'], 'gender': ['女'], 'birth': ['1989-04-30'], 'tel': ['15111112222']}>
        return HttpResponse('添加学生信息成功')

在templates模板中的新建一个index.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/stu/add_stu/" method="post">
        <table>
            <tr>
                <td>姓名</td>
                <td>性别</td>
                <td>生日</td>
                <td>电话</td>
            </tr>
            <tr>
                <td><input type="text" name="name"></td>
                <td><input type="text" name="gender"></td>
                <td><input type="date" name="birth"></td>
                <td><input type="text" name="tel"></td>
            </tr>
        </table>
        <input type="submit" value="提交">
    </form>
</body>
</html>

调试代码的一种方法

1.一行一行的打印

    print(request)
    print(request.POST)
    print(1)
    s_name = request.POST.get('name')
    print(2)
    s_gender = request.POST.get('gender')
    print(3)
    s_birth = request.POST.get('birth')
    print(4)
    s_tel = request.POST.get('tel')

2.打断点调试(debug)

在views.py定义添加完整学生信息的2中方法

1.方法一

from django.http import HttpResponse
from django.shortcuts import render
from stu.models import Student

def add_stu(request):
    if request.method == 'POST':
        s_name = request.POST.get('name')
        s_gender = 1 if request.POST.get('gender') else 0
        s_birth = request.POST.get('birth')
        s_tel = request.POST.get('tel')
        # 方法1
        stu = Student()
        stu.s_name = s_name
        stu.s_gender = s_gender
        stu.s_birth = s_birth
        stu.s_tel = s_tel
        stu.save()
        return HttpResponse('添加学生信息成功')

2.方法二

from django.http import HttpResponse
from django.shortcuts import render
from stu.models import Student

def add_stu(request):
    if request.method == 'POST':
        s_name = request.POST.get('name')
        s_gender = 1 if request.POST.get('gender') else 0
        s_birth = request.POST.get('birth')
        s_tel = request.POST.get('tel')
        # 方法2 ---以后常用这种-学生类.objects对象.create方法
        # objects对象:通过模型.objects来实现对数据的CRUD操作
        Student.objects.create(
            s_name = s_name,
            s_gender = s_gender,
            s_birth = s_birth,
            s_tel = s_tel
        )
        return HttpResponse('添加学生信息成功')

获取所有学生信息–

1.配置url路由

from django.conf.urls import url
from stu import views

urlpatterns = [
    # 查询所有学生信息
    url(r'^sel_stu/', views.selectStu),
]

2.定义查询所有学生的方法

def selectStu(request):
    # 查询所有学生信息--等同于MySQL中的select * from student
    stus = Student.objects.all()
    # 需要返回一个页面,将返回的学生信息加载到页面,返回的字典给前端,让前端去解析即可
    return render(request, 'select_stu.html', {'stus': stus})

3.前端页面展示
在templates下新建一个select_stu.html文件,在文件中编辑

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>查询所有学生信息</title>
</head>
<body>
    {% for stu in stus %}
        姓名:{{ stu.s_name }}
        电话:{{ stu.s_tel }}
        性别:{{ stu.s_gender }}
        生日:{{ stu.s_birth }}
        <br>
    {% endfor %}
</body>
</html>

4.查询所有女生信息
—where,这里使用filter(过滤),这里不能用get,因为get不能迭代

def selectStu(request):
    # 查询所有女生信息
    stu_fem = Student.objects.filter(s_gender=True)
    return render(request, 'select_stu.html', {'stu_fem': stu_fem})

5.查询id等于3的学生,注意,如果这里没有相对应的id,也会返回一个空的姓名

def selectStu(request):
    # 查询id等于3的学生
    stus = Student.objects.filter(id=3)
    return render(request, 'select_stu.html', {'stus': stus})

6.get和filter的区别
-1) get:返回一个满足条件的对象,没有满足条件的,则直接报DoesNotExist的异常;
-2) 如果查询结果有多个数据的话,就报MultiObjectsReturned。
-3) filter:返回满足条件的结果

7.查询id从大到小排列/排序

 # 查询id从大到小排序
    # stus = Student.objects.all().order_by('-id')
    # return render(request, 'select_stu.html', {'stus': stus})

8.查询id从小到大的排序

    # 查询id从小到大排序
    # stus = Student.objects.all().order_by('id')
    # return render(request, 'select_stu.html', {'stus': stus})

9.查询id最大的一个学生数据

    # 查询id最大的一个学生数据
    # stus = Student.objects.all().order_by('-id').first()
    # return render(request, 'detail.html', {'stus': stus})

10.查询id最小的一个学生数据

    # 查询id最小的一个学生数据
    # stus = Student.objects.all().order_by('-id').last()
    # return render(request, 'detail.html', {'stus': stus})
  1. 查询男生有多少个
    # 查询男生有多少个
    # stus = Student.objects.filter(s_gender=True).count()
    # return render(request, 'detail.html', {'stus': stus})

12.查询所有90后男生的信息

    # 查询所有90后男生的信息
    stus = Student.objects.filter(s_gender=True).\
        filter(s_birth__gte='1990-01-01').\
        filter(s_birth__lt='2000-01-01')
    return render(request, 'select_stu.html', {'stus': stus})

13.查询姓蔡学生的数据

    stus = Student.objects.filter(s_name__startswith='蔡')
    return render(request, 'select_stu.html', {'stus': stus})  

14.查询姓名以“为”结尾学生的信息

    stus = Student.objects.filter(s_name__endswith='为')
    return render(request, 'select_stu.html', {'stus': stus})  

15.查询姓名包含‘佩’学生的信息

    stus = Student.objects.filter(s_name__contains='佩')
    return render(request, 'select_stu.html', {'stus': stus})

16.判断是否存在“李丹”的学生
—-TypeError: ‘bool’ object is not iterable

    # 此处错误使用
    stus = Student.objects.filter(s_name='李丹').exists()
    return render(request, 'select_stu.html', {'stus': stus})

17.获取指定的多个id的值

    ids = [1, 3, 4]
    stus = Student.objects.filter(id__in=ids)
    return render(request, 'select_stu.html', {'stus': stus})

18.查询语文成绩大于数学成绩10分的学生

    stus = Student.objects.filter(s_math__gte=F('s_Chinese') + 10)
    return render(request, 'select_stu.html', {'stus': stus})  

19.查询数学成绩大于等于语文成绩的学生

    stus = Student.objects.filter(s_math__gte=F('s_Chinese'))
    return render(request,'select_stu.html', {'stus': stus})

20.查询学生姓名不叫李丹的,或者语文成绩大于80的学生

    # ~Q代表非  |代表或
    stus = Student.objects.filter(~Q(s_name='李丹') | Q(s_Chinese__gt=80))
    return render(request, 'select_stu.html', {'stus': stus})   

21.查询学生姓名不叫李丹的,且语文成绩大于80的学生

    # ~Q代表非  &代表且
    stus = Student.objects.filter(~Q(s_name='李丹') & Q(s_Chinese__gt=80))
    return render(request, 'select_stu.html', {'stus': stus})   

一些关键字的总结:

# filter(): 返回满足条件的结果
# first(): 返回第一条数据
# last(): 返回最后一条数据
# count(): 求和
# gt:大于
# gte:大于等于
# lt:小于
# lte: 小于等于
# from django.db.models import F, Q
# F(): 
# Q():
# &: 且
# |: 或

修改字段名称
alter table table_name change 原名 修改后名

猜你喜欢

转载自blog.csdn.net/momow26/article/details/80214535
今日推荐