Django-模型Models

模板

  1. 模板设置
    settings.py 中 TEMPLATES
    1. BACKEND:指定模板的引擎
    2. DIRS:指定存放模板的目录们
    DIRS : [os.path.join(BASE_DIR,‘template’)]
    3. APP_DIRS:指定是否去应用中搜索模板目录
    4. OPTIONS

  2. 模板的加载方式
    1. 使用 loader

    from django.template imort loader
    t = loader.get_template(‘模板名称’)
    html = t.render()
    return HttpResponse(html)

    1. 使用 render()

    from django.shortcuts import render
    return render(request,‘xxx.html’,locals())

  3. 模板的语法
    1. 变量

			dic = {
				"key1":"value1",
				"key2":"value2",
			}

			return render(request,'xx.html',locals())

			xx.html
				{{key1}}
  1. 标签

       1.{% if %}
       2.{% for %}
       	内置变量:forloop
       		forloop.counter
       		forloop.counter0
       3.{% extends %}
       4.{% block %}
       5.{% load %}
       6.{% static %}
       7.{% url %}
    
  2. 过滤器
    {{变量|过滤器:“参数”}}

  3. 静态文件

    1. 配置
      settings.py中 配置:
      1. STATIC_URL:静态文件访问路径
        STATIC_URL = “/static/”
      2. STATICFILES_DIRS:指定静态文件的存储目录
        STATICFILES_DIRS = (os.path.join(BASE_DIR,‘static’),)
    2. 使用
      1. 使用 静态文件访问路径 进行访问
        STATIC_URL = “/static/”
        <\img src="/static/images/a.jpg">
        <\img src=“http://127.0.0.1/static/images/a.jpg”>
      2. 使用 {% static %} 标签
        {% load static %}
        <\img src="{% static ‘images/a.jpg’ %}">
  4. 模板的继承

    1. 在父模板中
      {% block xxx %} … {% endblock %}
    2. 在子模板中
      1. {% extends ‘父模板名称’ %}
      2. {% block xxx %} … {% endblock %}
  5. url name 参数

    1. url(regex,views,name=“别名”)
    2. 使用别名
      {% url ‘别名’ %}
      {% url ‘别名’ ‘参数’ ‘参数’ %}
      ================================================
  6. 模型 - Models

    1. ORM框架
      ORM : Object Relationship Mapping
      对象 关系 映射
    • 三大特征:
      1. 表 到 类的映射
      2. 数据类型的映射
      3. 关系映射
    1. 创建 和 配置数据库
      1. 创建数据库
        create database webdb default charset utf8 collate utf8_general_ci;

      2. 数据库的配置
        settings.py
        DATABASES = {
        ‘default’: {
        ‘ENGINE’: ‘django.db.backends.sqlite3’,
        ‘NAME’: os.path.join(BASE_DIR, ‘db.sqlite3’),
        }
        }

        1. ENGINE
          指定数据库的引擎,mysql引擎如下:
          ‘django.db.backends.mysql’
        2. NAME
          指定要连接的数据库的名称
          ‘NAME’:‘webdb’
        3. USER
          指定登录到数据库的用户名
          ‘USER’:‘root’
        4. PASSWORD
          指定登录到数据库的密码
          ‘PASSWORD’:‘123456’
        5. HOST
          指定要连接的主机
          ‘HOST’:‘localhost’
        6. PORT
          指定要连接的主机上的端口号
          ‘PORT’:‘3306’
    2. 数据库的迁移
      1. python3 manage.py makemigrations
        作用:
        将每个应用下的models.py文件生成一个中间文件,并保存在migrations文件夹中
      2. python3 manage.py migrate
        作用:
        将每个应用下的migrations目录中的中间文件同步回数据库
    3. 编写Models
      1. Models的语法规范
        语法:
        class CLASSNAME(models.Model):
        NAME=models.FIELD_TYPE(FIELD_OPTIONS)
        1. CLASSNAME
          实体类名,表名组成一部分
          默认表名组成规范:
          应用名称_classname

        2. NAME
          属性名,映射回数据库就是字段名

        3. FIELD_TYPE
          字段类型:映射到表中的字段的类型

          1. BooleanField()
            编程语言中:使用True或False来表示值
            在数据库中:使用1或0来表示具体的值
            数据库类型:tinyint

          2. CharField()
            数据库类型:varchar
            注意:
            必须要指定max_length参数值

          3. DateField()
            作用:表示日期
            编程语言中:使用字符串来表示具体值
            数据库类型:date

          4. DateTimeField()
            作用:表示日期和时间
            数据库类型:datetime

          5. DecimalField()
            编程语言中:使用小数表示该列的值
            在数据库中:使用小数
            数据库类型:decimal
            示例:

             	money=models.DecimalField(
             		max_digits=7,
             		decimal_places=2
             	)
            
          6. FloatField()
            编程语言中和数据库中都使用小数表示值
            数据库类型:float

          7. EmailField()
            编程语言和数据库中使用字符串
            数据库类型:varchar

          8. IntegerField()
            编程语言和数据库中使用整数
            数据库类型:int

          9. URLField()
            编程语言和数据库中使用字符串
            数据库类型:varchar

          10. ImageField()
            作用:在数据库中为了保存图片的路径
            编程语言和数据库中使用字符串
            示例:
            image=models.ImageField(
            upload_to=“static/images”
            )

            upload_to:指定图片的上传路径
            	在后台上传时会自动的将文件保存在指定的目录下
            
          11. TextField()
            作用:表示大量数据
            编程语言和数据库中使用字符串
            数据库类型:text

        4. FIELD_OPTIONS
          字段选项,指定创建的列的额外的信息
          允许出现多个字段选项,多个选项之间使用,隔开

          1. primary_key
            如果设置为True,表示该列为主键
          2. null
            如果设置为True,表示该列值允许为空
            默认为False
          3. default
            设置所在列的默认值
          4. db_index
            如果设置为True,表示为该列增加索引
          5. unique
            如果设置为True,表示该列的值唯一
          6. db_column
            指定列的名称,如果不指定的话则采用属性名作为列名

          ex:
          创建一个属性,表示用户名称,长度30个字符,必须是唯一的,不能为空,添加索引

           	name=models.CharField(max_length=30,unique=True,null=False,db_index=True)
          
          • 练习:
            在 index 应用中追缴两个model类
            1. Author - 作者
              1.name - 姓名,非空,唯一,加索引
              2.age - 年龄,非空
              3.email - 邮箱,允许为空
            2. Book - 图书
              1.title - 书名,非空,唯一,加索引
              2.publicate_date - 出版时间,非空,加索引
    4. 相关指令
      1. 通过数据库自动导出models
        python3 manage.py inspectdb > xxx.py
    5. 数据的CRUD
      1. 增加数据

        1. Entry.objects.create(属性=值,属性=值)
          返回值:返回创建好的实体对象

        2. 创建Entry对象,并调用 save() 进行保存
          obj = Entry(属性=值,属性=值)
          obj.属性=值
          obj.save()
          无返回值,保存成功后,obj会被重新赋值

        3. 使用字典创建对象,并调用save()进行保存
          dic = {
          ‘属性1’:‘值’,
          ‘属性2’:‘值2’,
          }

          obj = Entry(**dic)
          obj.save()

        • 练习:
          使用以上三种方式,分别向Book和Publisher表中各增加三条数据
      2. 查询数据
        通过 Entry.objects 属性 调用查询接口
        Entry.objects.all()
        Entry.objects.get()
        Entry.objects.filter()
        … …

        1. 基本查询操作
          方法:all()
          用法:Entry.objects.all()
          作用:查询Entry实体中所有的数据
          select * from xxx
          返回值:QuerySet
        2. 查询返回指定列
          方法:values(‘列1’,‘列2’)
          用法:Entry.objects.values(…)
          作用:查询部分列的数据并返回
          select 列1,列2 from xxx
          返回值:QuerySet
          会将查询出来的数据封装到字典中,再封装到列表中
        3. 查询返回指定列
          方法:values_list(‘列1’,‘列2’)
          用法:Entry.objects.values_list(…)
          返回值:QuerySet
          会将查询出来的数据封装到元组中,再封装到列表中
        4. 排序查询
          方法:order_by
          用法:Entry.objects.order_by(’-列’,‘列’)
          说明:
          默认是按照升序排序,降序排序则需要在列前增加’-'表示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值