ORM版学员管理系统

班级表

表结构

class Class(models.Model):id = models.AutoField(primary_key=True)  # 主键cname = models.CharField(max_length=32)  # 班级名称first_day = models.DateField()  # 开班时间

查询班级

URL部分:

url(r'^class_list/$', views.class_list, name="class_list"),

视图部分:

def class_list(request):class_list = models.Class.objects.all()return render(request, "class_list.html", {"class_list": class_list})

HTML部分:

<table border="1">{% for class in class_list %}<tr><td>{{ forloop.counter }}</td><td>{{ class.id }}</td><td>{{ class.cname }}</td><td>{{ class.first_day|date:'Y-m-d' }}</td></tr>{% endfor %}
</table>

新增班级

URL部分:

url(r'^add_class/$', views.add_class, name="add_class"),

视图部分:

def add_class(request):# 前端POST填好的新班级信息if request.method == "POST":cname = request.POST.get("cname")first_day = request.POST.get("first_day")# 还可以这么获取提交的数据,但不推荐这么写# data = request.POST.dict()# del data["csrfmiddlewaretoken"]# 创建新数据的两种方式# new_class = models.Class(cname=cname, first_day=first_day)# new_class.save()models.Class.objects.create(cname=cname, first_day=first_day)# 跳转到class_listreturn redirect(reverse('class_list'))# 返回添加班级的页面return render(request, "add_class.html")

HTML部分:

在班级列表页面添加一个a标签:

<a href="{% url 'add_class' %}">新页面添加</a>

新添加页面:

注意 {% csrf_token %} 和 date类型的input标签。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="x-ua-compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>添加班级</title>
</head>
<body>
<form action="{% url 'add_class' %}" method="post">{% csrf_token %}<p>班级名称:<input type="text" name="cname"></p><p>开班日期:<input type="date" name="first_day"></p><p>提交<input type="submit"></p>
</form>
</body>
</html>

删除班级

URL部分:

url(r'^delete_class/$', views.delete_class, name="delete_class"),

视图部分:

def delete_class(request):class_id = request.GET.get("class_id")models.Class.objects.filter(id=class_id).delete()return redirect(reverse("class_list"))

HTML部分:

在班级列表页面的表格中添加删除。

<a href="{% url 'delete_class' %}?class_id={{ class.id }}">删除</a>

编辑班级

URL部分:

url(r'^edit_class/$', views.edit_class, name="edit_class"),

视图部分:

def edit_class(request):if request.method == "POST":class_id = request.POST.get("id")cname = request.POST.get("cname")first_day = request.POST.get("first_day")models.Class.objects.create(id=class_id, cname=cname, first_day=first_day)return redirect(reverse("class_list"))class_id = request.GET.get("class_id")class_obj = models.Class.objects.filter(id=class_id)if class_obj:class_obj = class_obj[0]return render(request, "edit_class.html", {"class": class_obj})# 找不到该条记录else:return redirect(reverse("class_list"))

HTML部分:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="x-ua-compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>编辑班级</title>
</head>
<body>
<form action="{% url 'edit_class' %}" method="post">{% csrf_token %}<input type="text" value="{{ class.id }}" style="display: none"><p>班级名称:<input type="text" name="cname" value="{{ class.cname }}"></p><p>开班日期:<input type="date" name="first_day" value="{{ class.first_day|date:'Y-m-d' }}"></p><p>提交<input type="submit"></p>
</form>
</body>
</html>

补充

如果将之前的URL由 /edit_class/?class_id=n修改为 /edit_class/n/ ,视图函数和HTML部分分别应该如何修改?

URL部分:

url(r'^edit_class/(\d+)$', views.edit_class, name="edit_class"),

视图部分:

def edit_class(request, class_id):if request.method == "POST":cname = request.POST.get("cname")first_day = request.POST.get("first_day")models.Class.objects.create(id=class_id, cname=cname, first_day=first_day)return redirect(reverse("class_list"))class_obj = models.Class.objects.filter(id=class_id)if class_obj:class_obj = class_obj[0]return render(request, "edit_class.html", {"class": class_obj})# 找不到该条记录else:print("没有该班级")return redirect(reverse("class_list"))

HTML部分:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="x-ua-compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>编辑班级</title>
</head>
<body>
<form action="{% url 'edit_class' class.id %}" method="post">{% csrf_token %}<input type="text" value="{{ class.id }}" style="display: none"><p>班级名称:<input type="text" name="cname" value="{{ class.cname }}"></p><p>开班日期:<input type="date" name="first_day" value="{{ class.first_day|date:'Y-m-d' }}"></p><p>提交<input type="submit"></p>
</form>
</body>
</html>

单表查询API汇总

<1> all():                 查询所有结果<2> filter(**kwargs):      它包含了与所给筛选条件相匹配的对象<3> get(**kwargs):         返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。<4> exclude(**kwargs):     它包含了与所给筛选条件不匹配的对象<5> values(*field):        返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列<6> values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列<7> order_by(*field):      对查询结果排序<8> reverse():             对查询结果反向排序<9> distinct():            从返回结果中剔除重复纪录<10> count():              返回数据库中匹配查询(QuerySet)的对象数量。<11> first():              返回第一条记录<12> last():               返回最后一条记录<13> exists():             如果QuerySet包含数据,就返回True,否则返回False

注意:一定区分Object与QuerySet的区别 !!!

QuerySet有update方法而Object默认没有。

单表查询之神奇的双下划线

models.Tb1.objects.filter(id__lt=10, id__gt=1)   # 获取id大于1 且 小于10的值models.Tb1.objects.filter(id__in=[11, 22, 33])   # 获取id等于11、22、33的数据
models.Tb1.objects.exclude(id__in=[11, 22, 33])  # not inmodels.Tb1.objects.filter(name__contains="ven")  # 获取name字段包含"ven"的
models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感models.Tb1.objects.filter(id__range=[1, 3])      # id范围是1到3的,等价于SQL的bettwen and类似的还有:startswith,istartswith, endswith, iendswith date字段还可以:
models.Class.objects.filter(first_day__year=2017)

备注:

在Django的日志设置中,配置上一个名为django.db.backends的logger实例即可查看翻译后的SQL语句。

LOGGING = {'version': 1,'disable_existing_loggers': False,'handlers': {'console':{'level':'DEBUG','class':'logging.StreamHandler',},},'loggers': {'django.db.backends': {'handlers': ['console'],'propagate': True,'level':'DEBUG',},}
}

Django项目完整版LOGGING配置:

复制代码
LOGGING = {'version': 1,'disable_existing_loggers': False,'formatters': {'standard': {'format': '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]''[%(levelname)s][%(message)s]'},'simple': {'format': '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'},'collect': {'format': '%(message)s'}},'filters': {'require_debug_true': {'()': 'django.utils.log.RequireDebugTrue',},},'handlers': {'console': {'level': 'DEBUG','filters': ['require_debug_true'],  # 只有在Django debug为True时才在屏幕打印日志'class': 'logging.StreamHandler','formatter': 'simple'},'default': {'level': 'INFO','class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,自动切'filename': os.path.join(BASE_LOG_DIR, "xxx_info.log"),  # 日志文件'maxBytes': 1024 * 1024 * 50,  # 日志大小 50M'backupCount': 3,'formatter': 'standard','encoding': 'utf-8',},'error': {'level': 'ERROR','class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,自动切'filename': os.path.join(BASE_LOG_DIR, "xxx_err.log"),  # 日志文件'maxBytes': 1024 * 1024 * 50,  # 日志大小 50M'backupCount': 5,'formatter': 'standard','encoding': 'utf-8',},'collect': {'level': 'INFO','class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,自动切'filename': os.path.join(BASE_LOG_DIR, "xxx_collect.log"),'maxBytes': 1024 * 1024 * 50,  # 日志大小 50M'backupCount': 5,'formatter': 'collect','encoding': "utf-8"}},'loggers': {# 默认的logger应用如下配置'': {'handlers': ['default', 'console', 'error'],  # 上线之后可以把'console'移除'level': 'DEBUG','propagate': True,},# 名为 'collect'的logger还单独处理'collect': {'handlers': ['console', 'collect'],'level': 'INFO',}},
}
复制代码

转载于:https://www.cnblogs.com/ddjl/p/8761161.html

ORM版学员管理系统相关推荐

  1. ORM版学员管理系统2

    学生信息管理 展示学生信息 URL部分 url(r'^student_list/', app01_views.student_list, name="student_list"), ...

  2. python面相对象编程超市系统_python面向对象编程: 面向对象版学员管理系统

    转载自https://www.cnblogs.com/LynHome/archive/2020/04/06/12650318.html 详细解读请参考https://www.cnblogs.com/b ...

  3. Python学员管理系统进阶版

    Python学员管理系统进阶版 整合基础,使用面向对象的方式做学员管理系统 文章目录 Python学员管理系统进阶版 前言 一.系统需求 1.创建程序文件 2.书写程序 3.管理系统框架 二.功能函数 ...

  4. python3 django开发_python3开发进阶-Django框架学习前的小项目(一个简单的学员管理系统)...

    ''' 自己独立写一个学员管理系统 表结构: 班级表: -id -grade_name 学生表: -id -student_name -grade 关联外键班级表 老师表: -id -teacher_ ...

  5. 子沐课堂——学员管理系统(前期准备+Model建立)

    今天开始我们来做一个基于Flask+Jinja2+SqlAlchemy+xlrd+Layui+G2的学员管理系统. 环境配置 首先我们要安装好环境,才能进行下一步的操作. (1)Flask Flask ...

  6. 本地数据库IndexedDB - 学员管理系统之登录(一)

    IndexedDB是浏览器提供的本地数据库,它可以被网页脚本创建和操作.IndexedDB允许存储大量数据,提供查找接口,还能建立索引.这些都是LocalStorage或Cookie不具备的.就数据库 ...

  7. python⾯向对象学员管理系统

    1. 系统需求 使⽤⾯向对象编程思想完成学员管理系统的开发,具体如下: 系统要求:学员数据存储在⽂件中 系统功能:添加学员.删除学员.修改学员信息.查询学员信息.显示所有学员信息.保存学员信息及退出系 ...

  8. python车辆管理系统_Python简易版停车管理系统

    本文实例为大家分享了Python简易版停车管理系统的具体代码,供大家参考,具体内容如下 import time # 最大停车数 max_car = 100 # 当前停车数,初始为0 cur_car = ...

  9. python实现简易版成绩管理系统_Python 实现简易版成绩管理系统!

    上一次,公众号介绍了如何使用 Python 实现单链表,下面让我们一探单链表的简单应用:在命令行,实现简易版成绩管理系统. 这次的简易版成绩管理系统,主要有六大功能:增加学生信息.删除学生信息.修改学 ...

最新文章

  1. 刷了一个月算法,终于拿到了double的offer
  2. Windows批处理中的等待技巧
  3. SVM学习笔记5-SMO
  4. Oracle WebCenter 11g 快速开发指南--翻译(一)
  5. 取某个日期所在周的任意一天日期
  6. FPGA的发展历史及相关名词解释
  7. 职高学会计电算化好还是学计算机好,会计电算化主要学什么?
  8. 在 JavaFX 中,如何计算文本所占像素的宽度
  9. clickhouse安装_初识ClickHouse——安装与入门
  10. php 查找键名,array_key_exists()函数搜索数组键名步骤详解
  11. iptables oracle策略,利用iptables防火墙保护Oracle数据库
  12. 瀑布流布局的实现方式
  13. linux时间同步ntp服务的安装与配置
  14. 3d 模型换人脸_3D人脸模型月销量上千单 谁在打印,谁在帮打?
  15. Mac系统如何通过自带的工具进行磁盘修复
  16. eclipse混淆打包出错
  17. python中的位置怎么看_如何获得字符在Python中的位置?
  18. 注册表:基本概念和reg文件
  19. 基于Halcon的螺栓螺丝部分划痕、腐蚀缺陷检测
  20. Carthagecocopads 摘抄笔记

热门文章

  1. 收获单季最大营收,“半死不活”特斯拉再续命一秒?
  2. 警方披露Uber撞人案细节,解密Uber自动驾驶系统
  3. AI一分钟 | “芯片门”影响仍在,英伟达旗下多款芯片也遭遇“幽灵”漏洞影响;贾跃亭邀媒体试乘法乐第FF91,你怎么看?
  4. 接口优化:Redis预减库存,减少对数据库访问方案
  5. G1调优很难?记住这些经验技巧~
  6. 主流NoSQL及应用场景详解
  7. fastjson到底做错了什么?为什么会被频繁爆出漏洞?
  8. IDEA 真牛逼,900 行又臭又长的类重构,几分钟搞定?真香!
  9. 我的4年学习心得:AI 应该是一个整体!
  10. 1900页数学基础:面向CS的线性代数、拓扑、微积分和最优化