zoukankan      html  css  js  c++  java
  • Django学习之二(orm和Ajax)

    1. orm简介

    2. Django使用mysql数据库的步骤:

    1. 在mysql里创建数据库

    ```sql
    create database 数据库名称 default charset=utf8;
    ```

    2. 在setting里配置

      DATABASES = {
          'default': {
          'ENGINE': 'django.db.backends.mysql', # 指定为MySQL引擎
          'NAME': 'l18', # 指定数据库的名称
          'HOST': 'localhost', # IP地址
          'PORT': 3306, # 端口
          'USER': 'root', # 用户名
          'PASSWORD': '123', # 密码
      }
      }

    3. 在setting同级目录下的init.py里配置

        import pymysql
        pymysql.install_as_MySQLdb()

    4. 在APP下的models.py文件里创建模型类

      class Book(models.Model):
        title = models.CharField(max_length=32)
        price = models.DecimalField(max_digits=5, decimal_places=2) # 最大值999.99
        publisher = models.CharField(max_length=32) # 出版社名称
        pub_date = models.DateField() # 出版时间

    5. 执行数据库迁移命令

        python3 manage.py makemigrations # 把models.py的变更记录记录下来
        python3 manage.py migrate # 把变更记录的操作同步到数据库中

      报错:

        1. 报错一:

        File "/home/moluo/.local/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 36, in <module>
        raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
        django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.

        解决方法:   注释掉36和37行代码即可.

        2. 报错二:

        File "/home/moluo/.local/lib/python3.6/site-packages/django/db/backends/mysql/operations.py", line 146, in last_executed_query
        query = query.decode(errors='replace')
        AttributeError: 'str' object has no attribute 'decode'

        解决方法:  146行加上如下代码:
        query = query.encode()

    6. 单表数据的相关操作

      1. 新增

        方式一:
        直接实例化对象,注意一定要save
        方式二:
        通过objects提供的create方法创建

      2. 修改

        方式一:
        获取对象,修改对象的属性,最后save

        方式二:
        直接使用update方法即可(支持批量修改)

      3. 删除

        方式一:
        获取对象,调用delete方法
        方式二:
        filter之后,直接delete方法(支持批量删除)

      4. 查询

        1. 查询api

          all 获取所有 QuerySet
          filter 过滤 QuerySet
          first 第一条 对象
          get 获取单条对象 对象
          values QuerySet 里面是字典
          values_list QuerySet 里面是元组

        2. 基于双下划线的模糊查询

          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="法") # 包含
          Book.objects.filter(title__icontains="python") # 不区分大小写
          Book.objects.filter(title__startswith="九") # 以...开头
          Book.objects.filter(pub_date__year=2018) # 年份=...

    7. 多表操作

      1. 查询操作

      

    #基于对象的跨表查询
    # """
    # 正向:按字段
    # ----------->
    # book publish
    # <-----------
    # 反向:小写表名 +_set(一对一时不需要加_set)
    # """

      2. Q对象

        python   JavaScript   orm的Q对象
        and       &&         &          与
        or       ||         |           或
        not       !         ~          非

      例子:

    8. ajax的基本格式:

        $.ajax({
        url: "",    // 提交的地址url
        type: "",    // 请求方式
        success: function(){    // 回调函数
        pass
          }
        })

      1.在templates文件下的js文件夹添加一个js.jquery文件,把query.js放在文件下,地址:http://cdn.bootcss.com/jquery/3.3.1/jquery.js,或者 :http://cdn.bootcss.com/jquery/3.3.1/jquery.min.js

      


    9.使用splite3数据库心得

      a.下载splite

     b.数据库配置:

     c.在models中创建数据库表名和字段

     d.在控制台执行迁移命令:

    python3 manage.py makemigrations

    python3 manage.py migrate

    e.在python console中执行添加表数据,一定要先添加无外键的数据,添加完了再次添加有外键的数据----------重点

     f.添加数据的例子:

      dep表,无外键

        models.Dep.objects.create(title="销售部")
        models.Dep.objects.create(title="关公部")

      emps表,有外键(dep_id)

        models.Emps.objects.create(name="令狐冲", age=24, salary=6000, dep_id=1, province="河南")
        models.Emps.objects.create(name="任盈盈", age=18, salary=8000, dep_id=2, province="广东")
        models.Emps.objects.create(name="任我行", age=56, salary=10000, dep_id=1, province="广东")
        models.Emps.objects.create(name="岳灵珊", age=19, salary=6000, dep_id=2, province="河南")
        models.Emps.objects.create(name="小龙女", age=20, salary=8000, dep_id=2, province="河北")

    g.添加完毕后,写查询代码,启动程序

     h.多对多添加数据的例子:

    book = models.Book.objects.filter(title="葵花宝典").first()
    ling = models.Author.objects.filter(name='令狐冲').first()
    xing = models.Author.objects.filter(name='任我行').first()
    ying = models.Author.objects.filter(name='任盈盈').first()
    book.authors.add(ling.pk, xing.pk, ying.pk)

  • 相关阅读:
    mac下用xattr命令来删除文件的扩展属性
    使用vue.js实现checkbox的全选和多个的删除功能
    正则表达式匹配任意字符(包括换行符)的写法
    jQuery Mobile动态刷新页面样式
    jquery mobile各类标签的refresh
    jQuery .attr()和.removeAttr()方法操作元素属性示例
    jquery mobile各类组件刷新方法
    Apache PDFbox开发指南之PDF文档读取
    日期字符串解析--SimpleDateFormat严格限制日期转换setLenient(false)
    hdu5032 Always Cook Mushroom
  • 原文地址:https://www.cnblogs.com/vivian0119/p/11875227.html
Copyright © 2011-2022 走看看