• Django基础2


    一:如何创建表

      class Food(models.Model):

        title = models.CharField(max_length=32)

      执行数据库迁移命令

        1.python manage.py makemigrations

        2.python manage.py migrate

      注意:必须在settings中的INSTALLED_APPS 注册models所在的app

    二:对于表记录的增删改查

        class Book(models.Model):
            nid=models.AutoField(primary_key=True)
            title=models.CharField(max_length=32)
            price=models.DecimalField(max_digits=8,decimal_places=2) # 999999.99
            pub_date=models.DateTimeField()  # "2012-12-12"
            publish=models.CharField(max_length=32)

    1.添加记录:

      方式1:

    book=Book(title="python",price=123,pub_date="2012-12-12",publish="人民出版社")
    book.save()

      方式2:

    book = Book.objects.create(title="python",price=123,pub_date="2012-12-12",publish="人民出版社")

    2.查询记录

    book_list=Book.objects.all() # [book1,book2,book3]
    book_list=Book.objects.filter(price=100) # [book1,book2,book3]

    3.删除记录

    Book.objects.filter(price=100).delete()

    4.修改记录

    Book.objects.filter(nid=5).update(price=100)
    Book.objects.filter(price=111).update(publish="南京出版社")

    图书管理系统的请求流程

     (1)查看书籍:
           请求url :http://127.0.0.1:8000/books/
           请求方式:GET
           
           
           django的urls.py:
               path('books/', views.books,name="books"),
    
           执行books(request): 
              1 查询所有书籍  
              2 将查询的queryset数据传入模板,render渲染出一个books页面
              3 返回给浏览器
              
           用户此时可以看到书籍的查看页面
    (2) 添加书籍
           请求url :http://127.0.0.1:8000/books/add/
           请求方式:GET
           
           
           django的urls.py:
               path('books/add/', views.addbook),
    
           执行addbook(request): 
              if GET请求:
                   返回给浏览器一个提交书籍的表单页面
                   用户此时可以看到书籍的添加页面
               
             ################ 
           用户输入数据,点击提交
            
           请求url :http://127.0.0.1:8000/books/add/
           请求方式:POST
           
           
           django的urls.py:
               path('books/add/', views.addbook),
    
           执行addbook(request): 
              if GET请求:
                   返回给浏览器一个提交书籍的表单页面
                   用户此时可以看到书籍的添加页面
              else:
                   获取用户提交的数据,向数据库中添加一本书籍
                   返回一个重定向:/books/
                    
          ################ 
           浏览器接收到重定向的响应:再发请求        
            
           请求url :http://127.0.0.1:8000/books/
           请求方式:GET
           
           django的urls.py:
               path('books/', views.books,name="books"),
    
           执行books(request): 
              1 查询所有书籍 (此时查询的书籍包含刚刚添加的书籍) 
              2 将查询的queryset数据传入模板,render渲染出一个books页面
              3 返回给浏览器
              
           用户此时可以看到书籍的查看页面
    (3) 删除请求
           请求url :http://127.0.0.1:8000/books/delete/5
           请求方式:GET
           
           django的urls.py:
               re_path('books/delete/(d+)', views.delbook,name="books"),
    
           执行delbook(request,5): 
              1 查询主键为5的书籍删除
              2 返回一个重定向:/books/
                    
          ################ 
           浏览器接收到重定向的响应:再发请求        
            
           请求url :http://127.0.0.1:8000/books/
           请求方式:GET
           
           django的urls.py:
               path('books/', views.books,name="books"),
    
           执行books(request): 
              1 查询所有书籍 (此时查询的书籍没有刚刚删除的书籍) 
              2 将查询的queryset数据传入模板,render渲染出一个books页面
              3 返回给浏览器
              
           用户此时可以看到书籍的查看页面
    View Code

    三:单表查询

    (1) all() :  调用者:objects管理器  返回queryset
    (2) filter() :调用者:objects管理器  返回queryset
    (3) get方法():调用者:objects管理器  返回查询到model对象 (注意:查询结果有且只有一个才执行)
    (4) first(),last()方法:调用者:queryset   返回model对象
    (5) exclude():调用者:objects管理器  返回queryset    不符合你输入条件的
    (6) order_by():由queryset对象调用,返回值是queryset  默认升序,降序加一个-"-price",  order_by("price","nid")以price升序排序,要是price相同就一nid的升序排序
    (7) count :数数  :由queryset对象调用 返回int
    (8) reverse():由queryset对象调用,返回值是queryset    翻转
    (9) exists(): 由queryset对象调用 返回值布尔值  检查表中是否有数据,不在乎多少,有数据就true,没有就false
    (10)values()方法: 由queryset对象调用,返回值是queryset  [{}]
    (11)values_list():由queryset对象调用,返回值是queryset   [(,)] 
    (12)distinct(): 由queryset对象调用,返回值是queryset  去重

          模糊查询(双下划线)

    Book.objects.filter(price__in=[100,200,300]) 
    Book.objects.filter(price__gt=100)   大于  gte >=
    Book.objects.filter(price__lt=100)   小于  lte <=
    Book.objects.filter(price__range=[100,200])
    Book.objects.filter(title__contains="python")  包含
    Book.objects.filter(title__icontains="python") 不区分大小写
    Book.objects.filter(title__startswith="py")   以xx开头
    Book.objects.filter(pub_date__year=2012)
  • 相关阅读:
    基于 kubeadm 搭建高可用的kubernetes 1.18.2 (k8s)集群- 四 部署 dashboard 2.x
    基于 kubeadm 搭建高可用的kubernetes 1.18.2 (k8s)集群- 三 集群可用性测试
    基于 kubeadm 搭建高可用的kubernetes 1.18.2 (k8s)集群二 搭建高可用集群
    基于 kubeadm 搭建高可用的kubernetes 1.18.2 (k8s)集群一 环境准备
    git 多用户多仓库配置
    百度地图结合ECharts实现复杂覆盖物(Overlay)
    【简洁易懂】CF372C Watching Fireworks is Fun (单调队列优化dp)
    博客上线测试
    Google Guava14.0 瓜娃学习笔记
    Lucene 4.7 学习及实例demo
  • 原文地址:https://www.cnblogs.com/qq849784670/p/9844127.html
Copyright © 2020-2023  润新知