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)
原文地址:https://www.cnblogs.com/qq849784670/p/9844127.html