一、场景

  • 通过登录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/ 示例如下:

image-20191129163803720

  • 配置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/")
    
最后修改日期: 2019年11月29日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。