zoukankan      html  css  js  c++  java
  • PYTHON3.django_day06(见pdf)

    day05回顾
    查询:
       聚合查询
         聚合函数:
            from django.db.models import Sum,Count,Avg,Max,Min
         1. 不分组的聚合查询
            MyModel.objects.aggregate(结果变量=聚合函数("列"))
            Book.objects.aggregate(mycnt=Count('id'))
         2. 分组的聚合查询
           books = Book.objects.values('pub')
           r = books.annotate(mycnt=Count('pub'))
           r = [{'pub':'清华大学出版社', mycnt:3},
            {'pub':'北京大学出版社', mycnt:5}
           ]

    F 对象
       1. 列表涨价的图书:
          books = Book.objects.filter(
              market_price__gt=F('price'))
       2. 要让所有清华大学出版社的书 涨价10元
         books = Book.objects.filter(pub='清华...')
         # 不推荐的做法
         for book in books:
             book.market_price=book.market_price+10
             book.save()
         # 推存做法:
         books.update(market_price=F('market_price')+10)

    Q对象:
       与&  或| 非~  查询条件
       books = Book.objects.filter(
           Q(pub='清华...') | Q(id__gt=100)
       )
    原生数据库操作方法:
       1. 查询操作
           Mymodel.objects.raw('SQL语句')  # 查询
       2. 对数据进行增加,删除,修改
          游标 cursor
          from djang.db import connection
              with connection.cursor() as ccc:
                 ccc.execute('SQL语句')

    admin 后台数据库管理
        $ python3 manage.py createsuperuser
        在 auth_user 表里添加一条记录
        http://127.0.0.1:8000/admin

       admin.py 中注册模型类
        admin.site.register(自定义的模型类)

       def BookManage(admin.ModelAdmin):
            list_display = ['id', 'pub', 'title']
            list_display_link = [...]
            list_filter = [....]
            list_editable = [...]
            search_fields = [...]

       admin.site.register(Book, BookManage)

       修改数据表的名称:
           # APP名称_book  # bookstore_book
           def Book(models.Model):
               title = models.CharField(...)
               class Meta:
                   db_table = 'xxx'

    数据表的关系映射:
       一对一
         class A(models.Model):
                ...
         class B(models.Model):
               ....
               abc = models.OneToOneField(A)
         a = A()  # 创建一个A类记录
         b = B(abc=a)
         # 通过b找a
            b.abc 
         # 通过a找b
            a.b 

      一对多
         class A(models.Model)  # 一
             ...
         class B(models.Model):
             ...
             abc = models.ForeignKey(A)  #  关联一的属性
         a = A()
         b1 = B(abc=a)
         b2 = B(abc=a)
         b3 = B(abc=a)
         # 正向
         b1.abc   # 找到a
         # 反向
         a.b_set.all()   # QuerySet[b1, b2, b3]
         B.object.filter(abc=a)

        models.ForeignKey(类, on_delete=xxxx)
         xxxx 可以取值:
             models.CASCADE  级联删除
             models.PROTECT  有多相关联直接报错
             models.SET_NULL
             models.SET_DEFAULT

    day06笔记:
    多对多
        示例:
        1. 在mysite4 创建应用 many2many
             python3 manage.py startapp many2many
        2. 在mysite4/settings.py 中注册该应用
             INSTALLED_APP = [
                 ...
                 'many2many'
             ]
         3. 在 many2many/models.py 里加两个模型类
             Author3
             Book3

    多对多示例:
       创建吕泽数据对象
      lvze = models.Author3.objects.create(name='吕泽')
     # 创建书 Python 关联作者 lvze
         python = lvze.book3_set.create(title='Python')
     # 创建书 C 关联作者 lvze
         c = lvze.book3_set.create(title='C')

      创建魏老师数据对象
      wei = models.Author3.objects.create(name='魏老师')
      # 让魏老师关联 python书
      wei.book3_set.add(python)
      # 让魏老师关联 c
      wei.book3_set.add(c)
       让魏老师写一本书 C++
         wei.book3_set.create(title='C++')


    多对多的查询:
      通过书查询作者:
        abook.authors.all()
        通过作者查询书
         lvze.book3_set.all()
       

    新建应用:
     python3 manage.py startapp cookie_session
       在主路由mysite4/urls.py中 建分布式路由
       urlpatterns = [
         url(r'^cs/', include('cookie_session.urls))
       ]
       创建分布试路由配置文件
       cookie_session/urls.py
          urlpatterns = [
              url(r'^set_cookies', views.set_cookie),
              url(r'^get_cookies', views.get_cookie),
          ]
       添加视图处理函数: cookie_session/views.py
          def set_cookie(request):
              ...
          def get_cookie(request):
              ...
        


    http://127.0.0.1:8000/cs/set_cookies
    http://127.0.0.1:8000/bookstore/books

    创建一个工程 mysite5
    对应的数据库为 mysite5_db
    配置数据库 settings.py
              __init__.py
                 import pymysql
                 pymysql.install_ .....

    创建应用 user
       主路由 url(r'^user/', include('user.urls'))
       添加子路由映射 user/urls.py
      
       user/templates
       user/templates/user


    session 的用法:
     当用户登陆
      1. 检查用户和密码是否是合法用户
      2. 如果是合法用户,在当前用户的session记录
         当前用户的名称和id
               request.session['user'] = {
                   'user': 'tedu',
                   'id': 1
               }
             注: 没有登陆的用户 session['user'] 不存在
        3.  退出登陆时,删除session['user']
             if 'user' in request.session:
                 del request.session['user']

       4. 为当前网站添加主页
         创建index应用
                在index/templates/index/index.html 创建文件
                注册应用
         让主路由r'^%' 关联 index/views.py
                        def index_view(request)
                            return render(..'index/index.html', locals())

    练习:
       1. 看懂登陆,和退出的流程,能自己修改
       2. 看懂记住用户名的操作
       3. 实现注册用户页面
       4. 创建一个应用 名为 note 用来存储个人日记
          能够实现日记的添加,修改,删除,查看功能(同bookstore)
          模型类:
             note/models.py
          class Note(models.Model):
               title = CharField('标题', max_length=100)
               content= models.TextField('内容')    
               create_time = models.DateTimeField('创建时间',
                           auto_now_add=True)
               mod_time = models.DateTimeField('修改时间',
                           auto_now=True)
               user = models.ForeignKey(User)

  • 相关阅读:
    C++入门经典-例8.5-多重继承
    C++入门经典-例8.3-子类显示调用父类构造函数
    C++入门经典-例8.2-构造函数的访问顺序
    C++入门经典-类成员的可访问性,继承后的可访问性
    C++入门经典-例8.1-类的继承
    C++入门经典-例7.10-运算符的重载,重载加号运算符
    C++入门经典-例7.9-对象数组,批量化生产
    C++入门经典-例7.8-const对象,标准尺寸
    C++入门经典-例7.7-对象与复制,菌类的繁殖
    C++入门经典-例7.6-this指针,同一个类的不同对象数据
  • 原文地址:https://www.cnblogs.com/shengjia/p/11209392.html
Copyright © 2011-2022 走看看