博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django模型系统综合案例
阅读量:5812 次
发布时间:2019-06-18

本文共 8630 字,大约阅读时间需要 28 分钟。

实现简单数据库数据页面展示,增加,删除,修改,查询,重置(5个)功能可用

效果展示:

1.建立模板

 使用bootstrap中的模板,创建基类模板与主页界面模板

base.html:提供模板使用,通过引用静态资源,以及{% block %} 进行占位

{% load static %}  #引用css静态资源的位置,如下css代码只需提供位置      
{% block title %}Dashboard Template for Bootstrap{% endblock %} #使用{% block %}进行挖坑,模板继承使用自定义的变量替代

{% block section %}Section title{% endblock %}

#对section进行挖坑 {% block content %} #对content进行挖坑
# Header Header Header Header
1,001 Lorem ipsum dolor sit
1,002 amet consectetur adipiscing elit
1,003 Integer nec odio Praesent
1,003 libero Sed cursus ante
1,004 dapibus diam Sed nisi
1,005 Nulla quis sem at
1,006 nibh elementum imperdiet Duis
1,007 sagittis ipsum Praesent mauris
1,008 Fusce nec tellus sed
1,009 augue semper porta Mauris
1,010 massa Vestibulum lacinia arcu
1,011 eget nulla Class aptent
1,012 taciti sociosqu ad litora
1,013 torquent per conubia nostra
1,014 per inceptos himenaeos Curabitur
1,015 sodales ligula in libero
{% endblock %}

通过继承base类的,通过自定义{% block %}块进行自定义页面。

{% extends 'teacher/base.html' %}{% block title%}学生列表{% endblock %}{% block section %}{
{ section }} {% endblock %}{% block content %}
#默认提交为get
#添加value选项时,会保存现场
添加
重置
{% for stu in students %}
{% endfor %}
序号 姓名 年龄 性别 qq 电话 操作
{
{ forloop.counter }}
{
{ stu.name }}
{
{ stu.age }}
{
{ stu.sex }}
{
{ stu.qq|default:'未填' }}
{
{ stu.phone|default:'未填' }}
编辑 删除 #删除是向后端传递参数
{% endblock %}

2.学生列表页面,搜索功能

#

urls.py中添加:

path('students/', views.students, name='students'),

view.py中添加:

def students(request):    section = '学生列表'      #获取查询参数    search = request.GET.get('search','').strip()    if search:        if search.isdigit():            sts = Student.objects.filter(Q(qq=search)|Q(phone=search),is_deleted=False).order_by('-e_time')            #是qq或者电话        else:            sts = Student.objects.filter(name__contains=search,is_deleted=False).order_by('-e_time')    else:        sts = Student.objects.filter(is_deleted=False).order_by('-e_time')    return render(request,'teacher/students.html',context=    {
'students':sts, 'section':section, 'search':search })

3.删除功能

urls.py中增加:

path('delete/',views.del_student,name='delete'),

views.py中添加:接收到参数后,进行数据库操作,返回主页面

def del_student(request):    pk = request.GET.get('pk',None)    if pk:        student = Student.objects.get(pk=pk)        student.is_deleted =True        student.save()    return redirect(reverse('teacher:students'))

4.添加学生

urls.py中增加:

path('student_add/',views.add_student,name='student_add'),

views.py中添加:点击‘添加’按钮后,GET请求跳转到student_edit.html。当通过页面添加保存后提交POST请求进行下一步。由于采集到身份证信息,学校名称等StudentDetail表

中的字段,需要先创建Student实例,后创建StudentDetail实例。

def add_student(request):    section = '添加学生'    grades = Grade.objects.all()       if request.method == 'GET':        return render(request,'teacher/student_edit.html',context={            'section':section,            'grades':grades,  #传递这个参数是为了进行页面渲染        })    if request.method == 'POST':        data = {            'name':request.POST.get('name'),            'age':request.POST.get('age'),            'sex':request.POST.get('sex'),            'qq':request.POST.get('qq'),            'phone':request.POST.get('phone'),            'grade_id':request.POST.get('grade'),        }        student = Student(**data)        student.save()        student_detail = StudentDetail(            num = request.POST.get('num'),            college= request.POST.get('college'),            student=student,        )        student_detail.save()        return  redirect(reverse('teacher:students'))
student_edit.html 代码为:
{% extends 'teacher/base.html' %}{
% block title %}添加学生{% endblock %}{
#{% load customer_tags %}#}{% block section %} {
{ section }}{% endblock %}{
% block content %}
{
% csrf_token %}
{
% endblock %}

5.

编辑学生信息

urls.py中添加:

path('student_edit/
/',views.edit_student,name='student_edit'),

views.py中添加: 

编辑修改学生信息,为获取已知pk的记录,如果修改以后学生详情变化,则不能保存StudentDetail表。需要先创建StudentDetail实例。在进行保存。

def edit_student(request,pk):    student = Student.objects.get(pk =pk)    grades = Grade.objects.all()    if request.method == 'GET':        return  render(request,'teacher/student_edit.html',                       context={                           'student':student,                           'grades':grades,                       })    if request.method == 'POST':        student.name = request.POST.get('name')        student.age = request.POST.get('age')        student.qq = request.POST.get('qq')        student.sex = request.POST.get('sex')        student.phone = request.POST.get('phone')        student.grade_id = request.POST.get('grade')        student.save()        #判断一下,student有没有详情        try:            student_detail = student.studentdetail        except:            student_detail = StudentDetail()            student_detail.student = student        student_detail.num = request.POST.get('num')        student_detail.college = request.POST.get('college')        student_detail.save()        return  redirect(reverse('teacher:students'))

6.使用标签渲染年级字段

在customer_tags.py 中添加

@register.simple_tag()def grade_option():    grades = Grade.objects.all()    return grades

在student_edit.html中引用,引用customer_tags中的grades,就能够在views.py中不传递grade参数也能够解析{% grade.name %}

{% load customer_tags %}          
{% csrf_token %}
{% endblock %}

view中的变化如下(可以注释如下部分)

def add_student(request):    section = '添加学生'   # grades = Grade.objects.all()    if request.method == 'GET':        return render(request,'teacher/student_edit.html',context={            'section':section,  #          'grades':grades,        })  def edit_student(request,pk):    student = Student.objects.get(pk =pk)#    grades = Grade.objects.all()    if request.method == 'GET':        return  render(request,'teacher/student_edit.html',                       context={                           'student':student,         #                  'grades':grades,                       })

 

转载于:https://www.cnblogs.com/taoge188/p/10520655.html

你可能感兴趣的文章
HCNA——RIP的路由汇总
查看>>
zabbix监控php状态(四)
查看>>
定时任务的创建
查看>>
实战Django:小型CMS Part2
查看>>
原创]windows server 2012 AD架构试验系列 – 16更改DC计算机名
查看>>
统治世界的十大算法
查看>>
linux svn安装和配置
查看>>
SSH中调用另一action的方法(chain,redirect)
查看>>
数据库基础
查看>>
表格排序
查看>>
关于Android四大组件的学习总结
查看>>
java只能的round,ceil,floor方法的使用
查看>>
由于无法创建应用程序域,因此未能执行请求。错误: 0x80070002 系统找不到指定的文件...
查看>>
新开的博客,为自己祝贺一下
查看>>
puppet任务计划
查看>>
【CQOI2011】放棋子
查看>>
采用JXL包进行EXCEL数据写入操作
查看>>
一周总结
查看>>
将txt文件转化为json进行操作
查看>>
[MySQL优化案例]系列 — slave延迟很大优化方法
查看>>