Django Form组件 学生管理系统
from django.db import models # Create your models here. class Classes(models.Model):
title=models.CharField(max_length=32) class Student(models.Model):
name=models.CharField(max_length=32)
email=models.CharField(max_length=32)
age=models.IntegerField(max_length=32)
cls=models.ForeignKey("Classes") class Teacher(models.Model):
tname=models.CharField(max_length=32)
c2t=models.ManyToManyField('Classes')
models
"""s4day77 URL Configuration The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.11/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/', views.login),
url(r'^ajax_login/', views.ajax_login),
url(r'^class_list/', views.class_list),
url(r'^add_class/', views.add_class),
url(r'^edit_class/(\d+)/', views.edit_class),
url(r'^del_class/(\d+)/',views.del_class), url(r'^student_list/',views.student_list),
url(r'^add_student/',views.add_student),
url(r'^edit_student/(\d+)/', views.edit_student),
url(r'^del_student/(\d+)/',views.del_student), url(r'^teacher_list/',views.teacher_list),
url(r'^add_teacher/',views.add_teacher),
url(r'^edit_teacher/(\d+)/',views.edit_teacher),
urls
from django.shortcuts import render,HttpResponse,redirect # Create your views here.
from app01 import models
from django.forms import Form
from django.forms import fields #字段包含正则表达式
from django.forms import widgets #导入插件 class ClassesForm(Form):
title=fields.RegexField("全栈\d+") #自定义正则表达式制定规则 def class_list(request):
cls_list=models.Classes.objects.all()
return render(request,'class_list.html',{'cls_list':cls_list}) def add_class(request):
if request.method == "GET":
obj=ClassesForm() #实例出一个对象,此时的obj为空值,为创建input标签
return render(request,'add_class.html',{'obj':obj})
else:
obj=ClassesForm(request.POST)
if obj.is_valid(): #校验值
# 需要往数据库增加数据
# print(obj.cleaned_data) #打印前端传来的字典格式数据
models.Classes.objects.create(**obj.cleaned_data)#因为数据是字典类型 增加的时候也可以是字典格式,索引直接**加数值
return redirect('/class_list/')
else:
print(obj.errors)
return render(request,'add_class.html',{'obj':obj}) def edit_class(request,nid):
if request.method == "GET":
row=models.Classes.objects.filter(id=nid).first() #查看数据库值
#让页面显示初始值
# obj = ClassForm(data={'title': 'asdfasdfasdfas'})
obj=ClassesForm(initial={'title':row.title}) #初始默认值
return render(request,'edit_class.html',{'nid':nid,'obj':obj}) #创建空input标签
else:
obj=ClassesForm(request.POST)
if obj.is_valid():
models.Classes.objects.filter(id=nid).update(**obj.cleaned_data)
return redirect('/class_list/')
else:
print(obj.errors)
return render(request,'edit_class.html',{'nid':nid,'obj':obj}) def del_class(request,nid):
if request.method == "GET":
models.Classes.objects.filter(id=nid).delete()
return redirect('/class_list/') class StudentForm(Form):
name=fields.CharField(
min_length=2,
max_length=6,
)
email=fields.EmailField()
age=fields.IntegerField(min_value=18,max_value=25)
cls_id=fields.IntegerField(widget=widgets.Select(choices=models.Classes.objects.values_list("id","title")))#选择下拉框 def student_list(request):
stu_list=models.Student.objects.all()
return render(request,'student_list.html',{'stu_list':stu_list}) def add_student(request):
if request.method == "GET":
obj=StudentForm()
return render(request,'add_student.html',{'obj':obj})
else:
obj=StudentForm(request.POST)
if obj.is_valid():
models.Student.objects.create(**obj.cleaned_data)
return redirect('/student_list/')
else:
print(obj.errors)
return render(request,'add_student.html',{'obj':obj}) def edit_student(request,nid):
if request.method == "GET":
#从学生数据库拿取name,email,age,cls_id值
row=models.Student.objects.filter(id=nid).values("name","email","age","cls_id").first()
obj=StudentForm(initial=row) #添加为默认值 name,email,age,cls_id
return render(request,'edit_student.html',{"nid":nid,"obj":obj}) #把obj放进前端 生成input标签
else:
obj=StudentForm(request.POST) #前端传来的值以post方式取值
if obj.is_valid(): #进行校验
models.Student.objects.filter(id=nid).update(**obj.cleaned_data) #正确校验的值,在进行更新
return redirect('/student_list/')
else:
print(obj.errors)
return render(request,'edit_student.html',{"nid":nid,"obj":obj}) def del_student(request,nid):
if request.method =="GET": #GET方式取nid
models.Student.objects.filter(id=nid).delete()
return redirect('/student_list/') class TeacherFrom(Form):
tname=fields.CharField(min_length=2) xx=fields.MultipleChoiceField( #多选框用MultipleChoiceField
# choices=models.Classes.objects.values_list("id","title"),
widget=widgets.SelectMultiple) #多选框 def __init__(self,*args,**kwargs): #修复一个小bug,定义一个init方法,继承TeacherTrom的内容,
#构造自己都有的方法,每次实例化出来的对象。
super(TeacherFrom,self).__init__(*args,**kwargs)
self.fields['xx'].widget.choices=models.Classes.objects.values_list("id","title") def teacher_list(request):
tea_list=models.Teacher.objects.all() #获取到老师所有的信息列表
return render(request,'teacher_list.html',{'tea_list':tea_list}) #将老师列表的信息传入到HTML def add_teacher(request):
if request.method == "GET": #如果是get方式,让用户看见add_teacher.html页面
obj=TeacherFrom() #实例化一个空对象
return render(request,'add_teacher.html',{"obj":obj})#将实例化的对象传入前端页面进行设置input框 else:
obj=TeacherFrom(request.POST) #后台取值操作 post方式
if obj.is_valid(): #对form提交 的值进行校验,
xx=obj.cleaned_data.pop("xx") #从字典里面的数据移除xx
row=models.Teacher.objects.create(**obj.cleaned_data)#向老师列表中添加一条信息
row.c2t.add(*xx)#向关联第三张表中添加数据
return redirect("/teacher_list/")
else:
print(obj.errors)
return render(request, 'add_teacher.html', {"obj": obj}) def edit_teacher(request,nid):
if request.method == "GET":
row=models.Teacher.objects.filter(id=nid).first()
class_ids=row.c2t.values_list('id')
# print(class_ids)
# print(".......")
#class_ids=[] 如果是这个方式的话 就可以用循环来做 然后添加到class_ids[]中
id_list=list(zip(*class_ids))[0]if list(zip(*class_ids)) else[] #是一个列表的值
obj=TeacherFrom(initial={'tname':row.tname,'xx':id_list}) #设置默认值initial={}字典格式
return render(request,'edit_teacher.html',{'nid':nid,'obj':obj}) else:
obj=TeacherFrom(request.POST)
if obj.is_valid():
# print(obj.cleaned_data) #取到数据
xx = obj.cleaned_data.pop('xx') #将xx移除到clas_id
row=models.Teacher.objects.filter(id=nid) #查看教师的对应的id值
row.update(**obj.cleaned_data) #更新老师数据库里面的内容
row.first().c2t.set(xx) #
return redirect("/teacher_list/")
else:
print(obj.errors)
return render(request,'edit_teacher.html',{'nid':nid,'obj':obj})
app01 views
class_list: <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>班级信息</h3>
<div>
<a href="/add_class">添加</a>
</div>
<form method="POST" action="/class_list">
{% csrf_token %}
<ul>
{% for row in cls_list %}
<li>
{{ row.title }}
<a href="/edit_class/{{ row.id }}/">编辑</a>
|
<a href="/del_class/{{ row.id }}/">删除</a>
</li>
{% endfor %}
</ul> </form>
</body>
</html> add_class:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>添加班级</h3> <form method="POST" action="/add_class/">
{% csrf_token %}
{{ obj.title }}{{ obj.errors.title.0 }}
<p>
<input type="submit" value="提交">
</p> </form>
</body>
class_list add_class
edit_class : <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>编辑班级信息</h3>
<form method="POST" action="/edit_class/{{ nid }}/">
{% csrf_token %}
<p>
{{ obj.title }}{{ obj.errors.title.0 }}
</p>
<p>
<input type="submit" value="提交"/>
</p>
</form>
</body>
</html>
edit_class del_class
student_list: <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>班级信息</h3>
<div>
<a href="/add_student/">添加</a>
</div>
<ul>
{% for row in stu_list %}
<li>
{{ row.id }}
{{ row.name}}
{{ row.email}}
{{ row.cls_id }}
{{ row.cls_title }}
|
<a href="/edit_student/{{ row.id }}/">编辑</a>
|
<a href="/del_student/{{ row.id }}/">删除</a>
</li>
{% endfor %}
</ul>
</body>
</html> add_student: <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>添加学生信息</h3>
<form method="POST" action="/add_student/">
{% csrf_token %}
<p>用户名
{{ obj.name }} {{ obj.errors.name.0 }}
</p>
<p>邮箱
{{ obj.email }}{{ obj.errors.name.0 }}
</p>
<p>年龄
{{ obj.age}}{{ obj.errors.age.0 }}
</p>
<p>班级名称
{{ obj.cls_id }}{{ obj.errors.cls_id.0 }}
</p>
<p>
<input type="submit" value="提交">
</p> </form>
</body>
</html>
student_list add_student
edit_student: <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css">
</head>
<body>
<h1>编辑学生信息</h1>
<div style="width: 500px;margin: 0 auto"></div>
<form class="form-horizontal" method="POST" action="/edit_student/{{ nid }}/">
{% csrf_token %}
<p>用户名
{{ obj.name }} {{ obj.errors.name.0 }}
</p>
<p>邮箱
{{ obj.email }}{{ obj.errors.name.0 }}
</p>
<p>年龄
{{ obj.age}}{{ obj.errors.age.0 }}
</p>
<p>班级名称
{{ obj.cls_id }}{{ obj.errors.cls_id.0 }}
</p>
<p>
<input type="submit" value="提交">
</p>
{#<div class="form-group">#}
{# <label class="col-sm-2 control-label">姓名:</label>#} </div>
</form>
</body>
</html>
edit_student del_student
teacher_list : <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>老师列表</h3>
<div>
<a href="/add_teacher/">添加</a>
</div>
<table>
<tr>
<th>ID</th>
<th>老师姓名</th>
<th>任教班级</th>
</tr>
{% for row in tea_list %}
<tr> <td>{{ row.id }}</td>
<td>{{ row.tname}}</td>
{# <td>{{ row.c2t.all}}</td>#}
<td>
{% for i in row.c2t.all %}
{{ i.title }}
{% endfor %}
</td>
<td>
<a href="/edit_teacher/{{ row.id }}/">编辑</a>
</td>
</tr>
{% endfor %} </table>
</body>
</html> add_teacher:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <h3>添加老师列表</h3> <form method="POST" action="/add_teacher/">
{% csrf_token %}
<p>老师姓名:
{{ obj.tname }}
</p>
<p>
任教班级:
{{ obj.xx }}
</p>
<p>
<input type="submit" value="提交">
</p> </form>
</body>
</html>
teacher_list add_teacher
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>编辑老师信息</h3>
<form method="POST" action="/edit_teacher/{{ nid }}/">
{% csrf_token %}
<p>老师姓名:
{{ obj.tname }}
</p>
<p>
任教班级:
{{ obj.xx }}
</p>
<p>
<input type="submit" value="提交">
</p> </form>
</body>
</html>
edit_teacher
Django Form组件 学生管理系统的更多相关文章
- 基于FORM组件学生管理系统【中间件】
目的:实现学生,老师,课程的增删改查 models.py from django.db import models # Create your models here. class UserInfo( ...
- 9.24 Django Form组件
2018-9-23 20:10:04 这两天优化了自己图书管理系统 github 连接:https://github.com/TrueNewBee/pythonDemo 顺便整理了博客,写了好多总结, ...
- 6月28日 Django form组件 和 modelform组件
Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...
- django Form组件
django Form组件 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1.创建 ...
- Django—Form组件
Django From简介 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比 ...
- django form组件 cookies,session
django form组件 渲染标签 就是组件里面的字段在前端展示叫做渲染标签 校验数据 用户输入的数据提交给后端组件叫做校验数据 forms组件中定义的字段都是必须传值的(required=Tr ...
- Django——form组件和ModelForm
一.原生form实现书城增删改查 1.构建模型并完成数据库迁移 (1)构建书城模型 from django.db import models # Create your models here. # ...
- Python Web框架篇:Django Form组件
Form简介 在HTTP中,表单(form标签),是用来提交数据的,其action属性说明了其传输数据的方法:如何传.如何接收. 访问网站时,表单可以实现客户端与服务器之间的通信.例如查询,就用到了表 ...
- Web框架django[Form]组件
新手上路 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1.创建Form类 # 创 ...
随机推荐
- Filecoin官方更新: Q4工作进展和2018年工作计划
ICO过后,Filecoin团队一直没有对外更新过工作计划(很多投资人都等待的不耐烦了).经过漫长的等待,在新年的第一个工作日,我们终于等来了来自于filecoin团队的声音, 这次更新真是出乎小编的 ...
- Java-Integer源码分析
除了两种浮点型,剩下的几种基本数据类型的包装类几乎都实现了常量池,有好处用数据的时候直接去拿,没有再去创建,坏处是在程序编译的时候就存入大量数据不管用不用到.下面是一篇很好的文章,很详细,转自:htt ...
- MYSQL数据库学习七 视图的操作
7.1 视图 视图使程序员只关心感兴趣的某些特定数据和他们所负责的特定任务.提高了数据库中数据的安全性. 视图的特点如下: 视图的列可以来自不同的表,是表的抽象和在逻辑意义上建立的新关系. 视图是由基 ...
- 选择排序—堆排序(Heap Sort) 没看明白,不解释
堆排序是一种树形选择排序,是对直接选择排序的有效改进. 基本思想: 堆的定义如下:具有n个元素的序列(k1,k2,...,kn),当且仅当满足 时称之为堆.由堆的定义可以看出,堆顶元素(即第一个元素) ...
- Tomcat服务器简单测试jsp文件和html文件
在tomcat里面的webapps文件夹下面新建一个test文件, 写一个test.html的文件,一个test.jsp的文件,两个文件的内容全是:2+2=<%=2+2%> 重新启动Tom ...
- PHP源代码加密
加密软件(php_screw) >下载网站:http://sourceforge.net/projects/php-screw/ >描述:php文件通常以文本格式存贮在服务器端, 很容易被 ...
- 依赖layui form模块 复选框tree插件(拓展可根据属性单选还是多选,数据反选)
近些天接的项目用的是layui.以前没用过,踩了很多坑,坑就不多说了,直接说layui的tree.因为自带的tree不满足需求,所以在论坛.博客上找了很久终于找到了可以复选的的插件,原文地址:http ...
- Hibernate学习笔记二
Hibernate持久化类的编写规则 Hibernate是持久层的ORM映射框架,专注于数据的持久化工作.所谓持久化,就是将内存中的数据永久存储到关系型数据库中. 持久化类 一个java类与数据库表建 ...
- W班-项目选题报告成绩
作业链接 https://edu.cnblogs.com/campus/fzu/FZUSoftwareEngineering1715W/homework/907 作业要求 1份团队选题报告(word电 ...
- C语言博客作业—结构体
一.PTA实验作业 题目1:结构体数组按总分排序 1. 本题PTA提交列表 2. 设计思路 void calc //函数calc求出p指针所指的结构体数组中 n 名学生各自的总分 { 定义循环变量i: ...