一、场景
- 通过登录http://localhost:8000/books/ 链接能够查看到数据信息
- 点击添加书籍按钮可以添加书籍
- 点击编辑可以对书籍信息原数据进行修改
- 点击删除可以对书籍信息原数据进行删除
二、ORM数据查询
- 语法Book.objects.all()
Book.objects.all() <QuerySet [<Book: Book object (2)>, <Book: Book object (5)>, <Book: Book object (7)>, <Book: Book object (8)>, <Book: Book object (9)>]> #通过Book.objects.all()获取到一个queryset对象,以列表格式进行存储 #列表中每个值表示一行列表数据,取值语法如下 Book.objects.all()[0].title 'linux'
- 通过url的get请求方式获取到数据
浏览器访问http://localhost:8000/books/ 示例如下:
- 配置url转发
编辑urls.py,配置url转发
from django.contrib import admin from django.urls import path,include,re_path from app01 import views urlpatterns = [ path('admin/', admin.site.urls), path('books/', views.books), ] #当请求admin/时通过view文件中的boks函数处理程序
- 配置templates模板
- 编写一个books.html模板文件用于数据展示
<!-- 1.包含django变量获取数据配置 --> <!-- 2.包含django标签for语法 --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <title>Title</title> </head> <body> <h3>书籍列表</h3> <div class="container"> <div class="row"> <div class="col-md-8 col-md-offset-2"> <a href="/addbooks/" class="btn btn-primary">添加书籍</a> <table class="table table-hover table-striped"> <thead> <tr> <th>ID</th> <th>名称</th> <th>价格</th> <th>价格</th> <th>出版日期</th> </tr> </thead> <tbody> {% for book in queryset %} <tr> <td>{{ book.id }}</td> <td>{{ book.title }}</td> <td>{{ book.price }}</td> <td>{{ book.publish }}</td> <td>{{ book.pub_date|date:"Y-m-d" }}</td> <td> <a href="/books/edit/{{ book.id }}/">编辑</a> </td> <td> <a href="/books/delete/{{ book.id }}/">删除</a> </td> </tr> {% endfor %} </tbody> </table> </div> </div> </div> </body> </html>
- view试图函数配置
from django.shortcuts import render,redirect,HttpResponse # Create your views here. from app01 import models def books(request): queryset = models.Book.objects.all() print(queryset) for obj in queryset: print(obj.title) return render(request,"books.html",locals())
- 总结
- 查询都可以基于get模式去获取数据
三、ORM数据增加操作
- 语法一
# 1.先通过Book对象定义好数据 # 2.类定义好对象后需要通过slave()方法生效 from app01.models import Book book = Book(title="linux",price=100,pub_date="2012-10-12",publish="苹果出版社") book.save()
- 语法二
Book.objects.create(title="自动化运维",price=105,pub_date="2012-11-12",publish="苹果出版社")
- 配置url转发
- 当用户请求的是GET模式的时候进行跳转到一个模板页面
- 当用户请求的是POST模式的时候进行后端处理
- 变量urls.py文件
from django.contrib import admin from django.urls import path,include,re_path from app01 import views urlpatterns = [ path('admin/', admin.site.urls), path('books/', views.books), path('addbooks/', views.addbooks), ]
- 配置templates模板
<!-- 1.通过form表单将数据提交至后端 --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <title>Title</title> </head> <body> <h3>书籍列表</h3> <div class="container"> <div class="row"> <div class="col-md-8 col-md-offset-2"> <form action="" method="post"> {% csrf_token %} <div> <label for="title">书籍名称</label> <input class="form-control" type="text" name="title" id="title"> </div> <div> <label for="price">书籍价格</label> <input class="form-control" type="text" name="price" id="price"> </div> <div> <label for="publish">出版社</label> <input class="form-control" type="text" name="publish" id="publish"> </div> <div> <label for="pub_date">日期</label> <input class="form-control" type="date" name="pub_date" id="pub_date"> </div> <input type="submit" value="submit" class="btn btn-default pull-right"> </form> </div> </div> </div> </body> </html>
- view视图函数操作
# 打印了两种插入数据的语法,可以分别进行使用 def addbooks(request): if request.method =="GET": return render(request,"addbooks.html") else: # book = models.Book(title="linux",price=100,pub_date="2012-10-12",publish="苹果出版社") # book.save() models.Book.objects.create(title=request.POST.get("title"),price=request.POST.get("price"),pub_date=request.POST.get("pub_date"),publish=request.POST.get("publish")) return redirect("/books/")
- 总结
ORM插入数据操作原理还是非常简单的
四、ORM数据更新操作
-
语法
Book.objects.filter(id=2).update(title="老男孩Linux运维")
- 配置url转发
- 当用户请求的是GET模式的时候进行跳转到一个模板页面
-
当用户请求的是POST模式的时候进行后端处理
-
编辑urls.py文件
urlpatterns = [ path('admin/', admin.site.urls), path('books/', views.books), path('addbooks/', views.addbooks), re_path('books/edit/(\d+)/', views.editbook), ]
- 配置templates模板
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <title>Title</title> </head> <body> <h3>书籍列表</h3> <div class="container"> <div class="row"> <div class="col-md-8 col-md-offset-2"> <form action="" method="post"> {% csrf_token %} <div> <label for="title">书籍名称</label> <input class="form-control" type="text" name="title" id="title"> </div> <div> <label for="price">书籍价格</label> <input class="form-control" type="text" name="price" id="price"> </div> <div> <label for="publish">出版社</label> <input class="form-control" type="text" name="publish" id="publish"> </div> <div> <label for="pub_date">日期</label> <input class="form-control" type="date" name="pub_date" id="pub_date"> </div> <input type="submit" value="submit" class="btn btn-default pull-right"> </form> </div> </div> </div> </body> </html>
- views视图函数
def editbook(request,id): if request.method == "GET": return render(request,"editbook.html") else: title = request.POST.get("title") price = request.POST.get("price") publish = request.POST.get("publish") pub_date = request.POST.get("pub_date") models.Book.objects.filter(id=id).update(title=title,price=price,publish=publish,pub_date=pub_date) return redirect("/books/")
- 总结
更新数据首先要认清语法,之后通过语法去修改
五、ORM数据删除操作
-
语法
Book.objects.filter(id=2).delete()
- 实现原理
- 通过get请求url连接/books/delete/id删除对应数据
- 通过模板books.html文件点击删除时将id带入到view中,后台处理
- 编辑urls.py文件
urlpatterns = [ path('admin/', admin.site.urls), path('books/', views.books), path('addbooks/', views.addbooks), re_path('books/delete/(\d+)/', views.delbook), re_path('books/edit/(\d+)/', views.editbook), ]
- views视图函数
def delbook(request,id): models.Book.objects.filter(id=id).delete() return redirect("/books/")
留言