博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ORM版,学生信息管理单表查询..
阅读量:6655 次
发布时间:2019-06-25

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

mysql

建学生表及课程表

添加内容

view.py

from django.shortcuts import render,HttpResponse,redirectfrom . import models# Create your views here.# 关于课程# 查所有的课程def class_list(request):    class_list  = models.Class.objects.all()    return render(request,"class_list.html",{
"class_list":class_list})# 删除操作def delete_class(request): # 先取到想要删除的id class_id = request.GET.get('class_id') print(class_id) models.Class.objects.filter(id=class_id).delete() return redirect("/class_list/")# 添加操作def add_class(request): if request.method == "POST": class_name = request.POST.get("cname") models.Class.objects.filter().create(cname=class_name) return redirect("/class_list/") return render(request,"add_class.html")# 编辑操作def edit_class(request): if request.method == "POST": id = request.POST.get("id") new_cname = request.POST.get("cname") models.Class.objects.filter(id=id).update(cname = new_cname,) return redirect("/class_list") class_id = request.GET.get("class_id") print(class_id) ret = models.Class.objects.filter(id=class_id) return render(request,"edit_class.html",{
"class_info":ret[0]})# 展示学生信息def student_list(request): student_list = models.Student.objects.all() return render(request,"student_list.html",{
"student_list":student_list})# 删除学生信息def delete_student(request): # 拿到到删除的ID student_id = request.GET.get('student_id') models.Student.objects.filter(id=student_id).delete() return redirect("/student_list")# 添加学生信息def add_student(request): if request.method == "POST": student_name = request.POST.get("sname") print(student_name) models.Student.objects.filter().create(sname=student_name) return redirect("/student_list/") return render(request,"add_student.html")# 编辑学生信息def edit_student(request): if request.method == "POST": student_id = request.POST.get("id") new_sname = request.POST.get("sname") models.Student.objects.filter(id=student_id).update(sname=new_sname) return redirect("/student_list/") # 获取需要修改的id student_id = request.GET.get("student_id") ret = models.Student.objects.filter(id=student_id) return render(request,"edit_student.html",{
"student_info":ret[0]})
逻辑处理

HTML文件

---------------------    
添加课程页面{
#{% csrf_token %} {# 跨站请求伪造保护 #}
H添加课程页面
    
课堂列表 {# {% csrf_token %}#}
{# 跨站请求伪造保护 #}
{% for class in class_list %}
{% endfor %}
# 班级ID 班级名称 操作
{
{ forloop.counter }}
{
{ class.id }}
{
{ class.cname }}
课堂列表
    
编辑课程信息{#{% csrf_token %}#}

编辑课程信息

编辑课程信息

 

进阶版

from django.shortcuts import render,HttpResponse,redirectfrom . import modelsfrom django.urls import reverse# Create your views here.# 关于课程# 查所有的课程def class_list(request):    class_list = models.Class.objects.all()    return render(request,"class_list.html",{
"class_list":class_list})# 删除操作def delete_class(request): # 先取到想要删除的id class_id = request.GET.get('class_id') print(class_id) models.Class.objects.filter(id=class_id).delete() # return redirect("/class_list/") return redirect(reverse("class_list"))# 添加操作def add_class(request): if request.method == "POST": class_name = request.POST.get("cname") first_day = request.POST.get("first_day") models.Class.objects.filter().create(cname=class_name,first_day=first_day) # return redirect("/class_list/") return redirect(reverse("class_list")) return render(request,"add_class.html")# 编辑操作# def edit_class(request):# if request.method == "POST":# id = request.POST.get("id")# new_cname = request.POST.get("cname")# models.Class.objects.filter(id=id).update(cname = new_cname,)# return redirect("/class_list")# class_id = request.GET.get("class_id")# print(class_id)## ret = models.Class.objects.filter(id=class_id)## return render(request,"edit_class.html",{"class_info":ret[0]})# 编辑班级修改版# 适用于URL是/edit_class/3/类型的def edit_class(request,arg): if request.method == "POST": id = request.POST.get("id") cname = request.POST.get("cname") first_day = request.POST.get('first_day') models.Class.objects.filter(id=id).update(cname=cname,first_day=first_day) # 更新完班级信息之后,跳转到class_list return redirect(reverse("class_list")) print("捕获url里面的参数",arg) class_obj = models.Class.objects.get(id=arg) return render(request,"edit_class.html",{
'class':class_obj})
view。py
from django.db import models# Create your models here.class Class(models.Model):    id = models.AutoField(primary_key=True)    cname = models.CharField(max_length=20)    first_day = models.DateField(null=True)class Student(models.Model):    id = models.AutoField(primary_key=True)    sname = models.CharField(max_length=20)
app01/model
from django.conf.urls import urlfrom django.contrib import adminfrom app01 import viewsurlpatterns = [    url(r'^admin/', admin.site.urls),    # 起别名,做成动态    url(r'^class_list/$', views.class_list, name="class_list"),    url(r'^delete_class/$', views.delete_class, name="delete_class"),    url(r'^add_class/$', views.add_class, name="add_class"),    # url(r'^edit_class/$', views.edit_class, name="edit_class"),    url(r'^edit_class/(\d+)/$', views.edit_class, name="edit_class"),    # /edit_class/3/ --> edit_class(request, 3)
url.py
    
编辑课程信息{
#{% csrf_token %}#}
{
% csrf_token %} {
# 跨站请求伪造保护 #}

编辑课程信息

编辑页面
    
课堂列表
{
% csrf_token %} {
# 跨站请求伪造保护 #}
{
% for class in class_list %}
{
% endfor %}
# 班级ID 班级名称 开班日期 操作
{
{ forloop.counter }}
{
{ class.id }}
{
{ class.cname }}
{
{ class.first_day|date:"Y-m-d" }}
{
# #}
课程页面
    
添加课程页面
{
% csrf_token %} {
# 跨站请求伪造保护 #}
增的页面

 

补充

如何将URL由/edit_class/?class_id=n修改为edit_class/n/,使其更加美观,视图函数和HTML部分需要如何修改呢?

url部分

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

html

    
编辑课程信息{
#{% csrf_token %}#}
{
% csrf_token %} {
# 跨站请求伪造保护 #}

编辑课程信息

View Code

view

# 适用于URL是/edit_class/3/类型的def edit_class(request,arg):    if request.method == "POST":        id = request.POST.get("id")        cname = request.POST.get("cname")        first_day = request.POST.get('first_day')        models.Class.objects.filter(id=id).update(cname=cname,first_day=first_day)        # 更新完班级信息之后,跳转到class_list        return redirect(reverse("class_list"))    print("捕获url里面的参数",arg)    class_obj = models.Class.objects.get(id=arg)    return render(request,"edit_class.html",{
'class':class_obj})
View Code

单表查询API

返回的是QuerySet对象1、all()       # 查询所有记录2、filter()     # 查询所有符合条件的记录3、exclude()    # 查询与所给筛选条件不匹配的对象4、valus()      # 列表中存放字典。5、values_list()  # 列表中存放元组。6、order_by()    # 按指定字段排序,不指定,按主键排序7、reverse()    # 对查询结果反向排序。8、distinct()    # 从返回的结果中去重。返回数字的:1、count()    # 返回记录个数返回布尔值的:1:exists()    # 查询结果是否存在,返回True或者False返回具体的数据对象的:1、get()      # 查询结果必须有且只有一个,否则报错2、first()    # 查询结果集合中的第一个,默认按照主键进行排序3、last()     # 查询结果集合中的最后一个,默认是按照主键进行排序

注意点

一定区分Object与QuerySet的区别!!

QuerySet有update方法而Object默认没有

all()

filter()

括号内为过滤条件,多个条件为且的关系。(id=3,cname=8)

exclude()

结果为除括号内过滤条件之外的数据。

 

 values()

values_list()

order_by()

 

reverse()

distinct()

 count()

exists()

当确实有数据存在的时候,如下两种方式均可以执行if语句,但是从执行时翻译成的sql语句,我们就可看出exist存在的意义,他只会查询一条记录,这对数据量很大的表,查询效率是很高的。

#方式一:stu_list=Student.objects.all().exists()             #翻译的sql语句:SELECT (1) AS "a" FROM "app01_student" LIMIT 1; args=()if stu_list:      print("OK")#方式二:stu_list=Student.objects.all()     #翻译的sql语句:SELECT "app01_student"."tid", "app01_student"."name", "app01_student"."birth", "app01_student"."age" FROM "app01_student";if stu_list:      print("OK")

get()

first,last

双下划线单表查询 __

__gt  大于   __lt 小于

__in  等于

__contains  含有xx字母

__range  范围

 

 

 

 总结

添加(2种方式):

1、book_obj = Book.objects.create(title="python",price=123)    返回新建的对象2、book_obj = Boook(title="python",price=123)    book_obj.save()

查询:

1、Book.object.all()                             # QuerySet [obj1,obj2,....]      2、Book.object.filter(price__gt=100,id__gt=5)    # QuerySet [obj1,obj2,]      3、Book.object.get(title="python")               # model 对象当是model对象时,返回的也只能是一个对象,所以get只能有一个结果4、Book.object.exclude()5、Book。object.all().order_by("price")  或则-price

 

 

 

读书的人,要甘于寂寞。寂寞能安定,定则心静,静则心清,清则心明,明则明白一切事理。

转载于:https://www.cnblogs.com/jassin-du/p/8322425.html

你可能感兴趣的文章
常用的Oracle数据库语句 (待更新完毕)
查看>>
恢复Hyper-V虚拟机丢失的数据文件过程
查看>>
解决ssh时候Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
查看>>
技术沙龙|区块链商用落地的策略与技术坑-区块链扩展和Fabric商用(杭州)
查看>>
C++ 之初体验
查看>>
常用命令
查看>>
我的友情链接
查看>>
自己做的一个肤色检测模型
查看>>
#51CTO学院四周年#砥砺前行的日子
查看>>
file_fdw创建外部表及其与普通表的结合
查看>>
oracle bug? ORA-07445 ,pl/sql for in()
查看>>
11.14-11.18周总结(二)
查看>>
一些总结
查看>>
软件测试工程师必备技能,纯干货分享!
查看>>
国外一个牛人写好的VIM配置方案spf13
查看>>
Python 单向循环链表
查看>>
Redis 客户端安装与远程连接图解
查看>>
BZOJ3328: PYXFIB(单位根反演?)
查看>>
使用EasyUI的treegrid犯的个低级错误
查看>>
jmeter 登录并发 (此文章有待修改)
查看>>