「Python学习日记」Django从零开始,搭建学生管理系统(1)
上篇说到添加完数据了,下面我们接着继续
如何去展示呢,首先我们要有链接吧?
我们访问127.0.0.1:8000,这个是我们的主页,如图
![15ef9a67397b00c7827ead9fa61a1123.png](https://i-blog.csdnimg.cn/blog_migrate/89eaa9c1ca58cc098df0ed77c2fd138d.jpeg)
Django首页
这里显示的是Django的首页,并不是我们的,那我们接着往下来
打开stu_testapp01views.py文件,写上如下代码:
from django.shortcuts import render# 引入HttpResponsefrom django.http.response import HttpResponse# 导入之前写的模型类from .models import *# 第一个参数必须是request,这点要注意# 函数的意思就是返回"这是首页"def index(request): return HttpResponse("这是首页")
再打开stu_teststu_testurls.py,写上如下代码:
from django.contrib import adminfrom django.urls import path# 引入刚写的viewsfrom app01 import viewsurlpatterns = [ path('admin/', admin.site.urls), # 这里添加路由,空字符串表示是首页的意思, # views.index 表示访问首页时,调用views.index # 注意:views.index 后面是没有括号的 path('', views.index),]urlpatterns = [ path('admin/', admin.site.urls), path('', views.index), path('class/', views.stuc),]
刷新127.0.0.1:8000页面,我们会看到如下内容
![37ee56b443038b040637752d6fa02810.png](https://i-blog.csdnimg.cn/blog_migrate/fa732b8ce61ee9a50b05ba98176c9238.jpeg)
首页
这里可以发现urls路由的作用是匹配地址,然后运行指定的函数。也就是分发的意思。
views 里面放的是用来执行的函数,返回对应的页面或者数据
大概理清楚思路了,我们接着写
刚才的首页太简陋了,先创建一个页面
右键templates -> new -> HTML File
![0b116a4c2e2395ac7f01c5ead2099022.png](https://i-blog.csdnimg.cn/blog_migrate/3e971d0b78c584bcb15a8ae9bbc8566b.jpeg)
创建HTML
![2d513b455588c8aa19d20411fa2fb175.png](https://i-blog.csdnimg.cn/blog_migrate/69a92c38231a3a91737b3adf0946fdce.jpeg)
给html命名
起个名字,这里就叫index, 然后回车,就创建好了。
打开刚创建的html页面,
title修改首页,保存再切回views,把之前的代码修改如下:
def index(request): # 第一个参数就是request, 第二个参数这里是我们刚写的html return render(request, "index.html")
保存,我们在浏览器刷新下,会看到
![9228c044d62e2704c6405ca24e02a689.png](https://i-blog.csdnimg.cn/blog_migrate/ce1aaa3f2fb956b360ac7367fecca642.jpeg)
首页html
这个就是我们刚写的页面。到这里整体的流程就通了。
接下来把数据显示到页面上。例如,我这里想在首页里面显示出全班级,然后点击进去,会看到班级里面所有学生的信息。就按照这个思路先来写。
先做首页,既然是首页返回的,就要在刚写的views里的首页的函数里面写。
比如我们要返回所有的班级,代码如下
def index(request): # 这里是查询语句,查询所有班级 后面的all() 就已经说明问题了 # student_class用来接收查询的内容 # locals() 暂时就理解成,在index里面的所有局部变量都返回过去 # 当然,我说的并不专业,大家理解就好 student_class = StuClass.objects.all() return render(request, "index.html", locals())
这样就把数据给到了index.html中。
接下把数据给填写到首页中去
打开index.html,代码如下:
首页 {% for stuclass in student_class %} {{ stuclass.class_stu}} {% endfor %}
猛一看,感觉有点复杂,这里大概解释一下。
# {% %} 这样括起来的是python的语句{% for stuclass in student_class %}{% endfor %}# {{ }} 这样括起来的是变量 {{ stuclass.class_stu}}
保存代码,刷新下首页看看是什么
![6f7c47caf24b01aa3ec7c6464a8c6ea4.png](https://i-blog.csdnimg.cn/blog_migrate/ef6c518320eaee2e04a2d0ab4cb87207.jpeg)
首页
这样我们之前在后台添加的所有班级的数据就列了出来。
要是想点击进去,看到全部同学的名字呢?
首先,我们再urls中添加:
urlpatterns = [ path('admin/', admin.site.urls), path('', views.index), # 添加新的路由 # 是把参数传给views.stuc # id代表传入的参数名字 # 意思是把一个int类型的参数id传给views.stuc # 这个int类型的参数是上面的html传递过来的 path('class//', views.stuc),]
接着我们写views.stuc 切换views.py,写上
# 由于路由传过来的有个参数,所以这边要加一个参数,我们也命名为id好了def stuc(request, id):# 这个语句的意思就是,在Students中查询forkey=id的全部数据 # forkey就是外键的意思 # index传的的班级里面的主键 # 我们再models里面定义的学生表里面,班级的主键是学生的外键 # 这里通过查询外键相对应的,就等于是这个班级的了 students = Students.objects.filter(forkey=id).all() return render(request, "stu_class.html", locals())
这里返回的有个html,我们新建一个stu_class.html,打开后,代码如下
学生列表 # students是views中stuc穿过来的,由于是个列表,所有要用for循环给拿出来 {% for student in students %} # name ,gender ,age都是我们再models里面定义的字段,直接拿来用就可以了 学生姓名:{{ student.name }}----学生性别:{{ student.gender }}----学生年龄:{{ student.age }} {% endfor %}
刷新下,我们点击1班,看一下
![ec6f8ddbd07460426256300cd8736347.png](https://i-blog.csdnimg.cn/blog_migrate/1230e3ec18ddaa262dc754080660b219.jpeg)
学生列表
学生确实都出来了,可是这个性别看着有点别扭。回看我们models中定义性别的代码:
genders = ( (0,"男"), (1,"女"), ) gender = models.IntegerField(verbose_name="性别", choices=genders)
我们用了choices选择器,所以stu_class.html可以这么写
学生姓名:{{ student.name }}----学生性别:{{ student.get_gender_display }}----学生年龄:{{ student.age }}
get_gender_display,中间的gender是我们定义的性别字段的名字。
这种方法用于使用了choices选择器的字段,保存一下,我们刷新下看看
![2e53d4dc8796b30c8e57d0f3da932b12.png](https://i-blog.csdnimg.cn/blog_migrate/ae2bd74a720dab1982b7f1a25aa656c5.jpeg)
get_gender_display
这看起来就舒服多了。记住这个关键点哦。
到这里 ,我们这个简易的学生管理系统就实现了。
注意,只是一个简易的学生管理系统。要求不能太高。
通过这个简单的项目,是不是有发现自己哪里有不足?哪里有疑问?
这就是实战项目的好处。欢迎大家来跟我一起交流学习。
下一篇我们做个系统的整理,好用来对我们的不足以及疑问来进行个补充。