Django(15)-模型层及ORM介绍

Django(1)-简介

Django(2)-创建项目及默认项目目录结构介绍

Django(3)-配置文件详解

Django(4)-URL和视图

Django(5)-路由配置实例

Django(6)-请求及响应

Django(7)-Get请求和Post请求

Django(8)-设计模式

Django(9)-模板层简介与入门实例

Django(10)-模板层的变量和标签

Django(11)-模板层的过滤器和继承

Django(12)-url反向解析

Django(13)-静态文件

Django(14)-应用及分布式路由

Django(15)-模型层及ORM介绍

Django(16)-ORM基础字段及选项

Django(17)-ORM创建数据

Django(18)-ORM常用的查询函数详解及实例演示

Django(19)-ORM条件查询

Django(20)-ORM更新操作及实例演示

Django(21)-ORM删除操作及实例演示

Django(22)-ORM中F对象和Q对象

Django(23)-ORM聚合查询和原生数据库操作

Django(24)-admin后台管理设置步骤以及常见样式详解

Django实战技巧(1)-开发测试生产环境配置切换处理技巧

Django实战技巧(2)-git代码仓分支管理技巧

Django实战技巧(3)-项目配置

1、模型层

  • 模型层:负责跟数据库之间进行通信
  • Django底层依赖mysqlclient,因此首先需要安装mysqlclient
    • 打开 mysqlclient下载地址,然后按FCtrl+F搜索,输入mysqlclient,即可搜索到下载包(whl文件),根据计算机系统位数以及python版本选择对应的安装版本,比如这里选择python3.9,windows 64位机器的安装包
      在这里插入图片描述

    • 然后执行 pip install F:/softare/mysqlclient-1.4.6-cp39-cp39-win_amd64.whl 进行安装

      在这里插入图片描述

    • pip list ,如下,确认已经安装成功
      在这里插入图片描述

  • 若在Centos系统出现如下错误:
ERROR: Command errored out with exit status 1:
     command: /root/.local/share/virtualenvs/redrose2100.com-wS0Hl33Y/bin/python -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-pu352hqt/mysqlclient_05d0f83fba2148a7a1252de2911c0c15/setup.py'"'"'; __file__='"'"'/tmp/pip-install-pu352hqt/mysqlclient_05d0f83fba2148a7a1252de2911c0c15/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-f2vazjrs
         cwd: /tmp/pip-install-pu352hqt/mysqlclient_05d0f83fba2148a7a1252de2911c0c15/
    Complete output (12 lines):
    /bin/sh: mysql_config: command not found
    /bin/sh: mariadb_config: command not found
    /bin/sh: mysql_config: command not found
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-pu352hqt/mysqlclient_05d0f83fba2148a7a1252de2911c0c15/setup.py", line 16, in <module>
        metadata, options = get_config()
      File "/tmp/pip-install-pu352hqt/mysqlclient_05d0f83fba2148a7a1252de2911c0c15/setup_posix.py", line 61, in get_config
        libs = mysql_config("libs")
      File "/tmp/pip-install-pu352hqt/mysqlclient_05d0f83fba2148a7a1252de2911c0c15/setup_posix.py", line 29, in mysql_config
        raise EnvironmentError("%s not found" % (_mysql_config_path,))
    OSError: mysql_config not found
    ----------------------------------------
WARNING: Discarding http://mirrors.cloud.aliyuncs.com/pypi/packages/4d/38/c5f8bac9c50f3042c8f05615f84206f77f03db79781db841898fde1bb284/mysqlclient-1.4.4.tar.gz#sha256=9c737cc55a5dc8dd3583a942d5a9b21be58d16f00f5fefca4e575e7d9682e98c (from http://mirrors.cloud.aliyuncs.com/pypi/simple/mysqlclient/). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
  Downloading http://mirrors.cloud.aliyuncs.com/pypi/packages/13/37/6c941aabeb78464a538b7d43266bfae645993779e3ca3e12fe82b4590f52/mysqlclient-1.4.3.tar.gz (86 kB)
     |████████████████████████████████| 86 kB 6.0 MB/s
^CERROR: Operation cancelled by user

则依次执行如下命令即可

yum install mysql-devel
pip install mysqlclient

  • 在mysql中创建数据库,数据库名通常与项目名称一致,如下:
create database mysite1 default charset utf8;

在这里插入图片描述

  • 配置Django数据库配置(setting.py),将原sqlite的配置删除或注释掉,然后修改为mysql,配置如下:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mysite1',
        'USER':'root',
        'PASSWORD':'xxxxxx',
        'HOST':'192.168.1.200',
        'PORT':'3306'
    }
}

在这里插入图片描述在这里插入图片描述

2、什么是模型

  • 模型是一个Python类,它是由django.db.models.Model派生出的子类
  • 一个模型类代表数据库中的一张数据表
  • 模型类中每一个类属性都代表数据库中的一个字段
  • 模型是数据交互的接口,是表示和操作数据库的方法和方式

3、ORM框架

  • 定义:ORM(Object Relational Mapping)即对象关系映射,它是一种程序技术,它允许你使用类和对象对数据库进行操作,从而避免通过SQL语句操作数据库
  • 作用:
    • 建立模型类和表之间的的对应关系,允许我们通过面向对象的方式类操作数据库
    • 根据设计的模型类生成数据库中的表格
    • 通过简单的配置就可以进行数据库的切换
  • 优点:
    • 只需要面向对象编程,不需要面向数据库编写代码
    • 对数据库的操作都转换为类属性和方法的操作
    • 不用编写各种数据库的sql语句
    • 实现了数据模型与数据库的解耦,屏蔽了不同数据库操作上的差异
    • 不再关注用的是mysql,Oracle,还是其他数据库等的内部细节
    • 通过简单的配置就可以轻松更换数据库,而不需药修改代码
  • 缺点:
    • 对于复杂业务,使用成本较高
    • 根据对象的操作转换为SQL语句,根据查询的结果转换为对象,在映射过程中有性能的损失
  • 映射图:
    在这里插入图片描述

4、实例

在app中的模型文件中定义一个模型类,如下,用来存储人,包含姓名和年龄两个属性

from django.db import models

# Create your models here.


class Person(models.Model):
    name=models.CharField("姓名",max_length=50,default='')
    age=models.IntegerField("年龄")

在这里插入图片描述
定义按成模型类之后,数据库中并不会有数据表的生成
在这里插入图片描述

当模型类的属性发生修改(如增加、删除、修改等)时,即数据库定义发生变声时,需要对数据库进行前移,在项目目录下执行如下两条命令即可

python manage.py makemigrations
python manage.py migrate

在这里插入图片描述
如下,表示数据库迁移成功
在这里插入图片描述
若执行python manage.py migrate时出现如下错误,则检查setting.py中数据库的用户名密码是否正确

在这里插入图片描述
数据库迁移完成后,再次进入数据库后台查看,此时发现数据库中已经存在数据表了,其他数据表示django自带的数据表,在第一次执行这个命令的时候,会同步将这些数据表生成
在这里插入图片描述
在数据库中执行 desc app1_person; 命令,查看表中已经创建好了表结构,注意,如果没有指定id,会自动给创建一个id
在这里插入图片描述
通过上面的实例可以看出, 表名为:应用名_模型名的小写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
好的,关于Django模型、视图和模板,我可以做个简单的介绍Django是一个MVC框架,其中的M、V、C分别指的是模型层、视图层和控制器层(其中控制器层在Django中对应的是URLconf),而这里的MVC与传统的MVC有所不同,更倾向于MVT的架构,即模型层(Model)、视图层(View)和模板层(Template)。 - 模型(Model):模型层主要是把应用中需要用到的数据以类似面向对象的方式进行定义、管理和操作,通常对应database中的表。Django中的ORM(Object-relational mapping)对开发者屏蔽了底层的SQL操作,开发者可以直接以Python语言去操作数据库,而不需要关心底层SQL的实现细节。 - 视图(View):视图层最主要的作用是处理用户的请求,响应相应的结果给用户。一般来说,视图会从数据库、缓存等数据源中获取数据,然后将结果进行组装,返回HttpResponse给用户。Django中视图可以通过函数或者类的方式来定义,对外提供一个可被URLconf调用的可调用对象。 - 模板(Template):模板是视图层生成响应结果的主要组成部分,可以理解为一个动态生成的HTML页面,其中包含了数据展示、控制逻辑、页面渲染等元素。Django中的模板提供了超过100个内置的指令和过滤器,开发者可以非常方便的实现模板的渲染和页面的实现。 总结一下,模型层主要和数据打交道,视图层主要和操作和生成Http Response联系在一起,模板层主要负责页面的渲染和数据展示。希望这个介绍可以帮到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

redrose2100

您的鼓励是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值