• Django入门1



    提示:以下是本篇文章正文内容。

    一、Django中的Models

    1.model简介

    • [1] 通常情况,一个Models对应数据库的一张表
    • [2] Django中Models以类的形式表现
    • [3] 它包含了一些基本字段以及数据的一些行为
    • [4] 我们只需要在类里面进行操作,就可以操作数据库、表,不需要直接使用SQL语句
    • [5] 我们通过创建类来创建数据表,所以对数据库的操作,都是对类与对类的对象进行操作,而不使用sql语句
    • [6] ORM对象关系映射,实现了对象和数据库的映射,隐藏了数据访问的细节,不需要编写SQL语句

    代码如下:

    form django.db import models
    
    class Modelname(models.Model):
    	# 创建模型类并继承models.Model
    	# 一个类就是数据库的一张表
    	field1 = models.XXXfield(max_lenge=10,verbose_name='haha'
    	field = models.XXXfield()
    	class Meta():
    		# 为这个类定义一个说明
    		verbose_name = XXX
    		# 不加这个的话在我们的verbose_name在admin里面会被自动加上s
    		verbose_name_plural = XXX		 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2.model设计

    1. 设计Model的时候,可以继承自Models.model或者AbstractUser,AbstractUser是内置的用户类,当要继承内置的用户模型并进行扩展时,就使用它,Models则是通用的模型类,自定义模型都需要继承这个.
    2. AbstractUser要记得在setting.py里面加上AUTH_USER_MODEL = ‘users.UserProfile’
    3. 设计表的时候,首先要分享需要哪些表,关键是分析关系:实体1 <对于关系> 实体2,表关系是一对多,还是多对一等等,要自行分析定义外键
    4. 设计表的第二步是设计具体的字段,每个字段的类型是否是必填。

    通常在我们的表里面可以加一个add_time属性,用来记录这条记录是什么时候添加进的,

    from datetime import datetime
    class BaseModel(models.Model):
    	add_time = models.DateTimeField(default=datetime.now,verbose_name="添加时间"
    	class Meta:
    		# Django会帮我们创建这个表
    		abstract = True
    	class Course(BaseModel):
    		'''这里写属性'''
    	 	'''外键'''
    	class Lesson(BaseModel):
    		course = models.ForeignKey(Course,on_delete=models.CASCADE)
    		'''这里必须注意第一个参数是要关联的外键,
    		第二个参数是一定要写的,用来设置当Course被删除的时候,
    		外键怎么处理,CASCADE表示如果对应的课程被删除,那么外键的
    		记录也会级联的删除,而一种SET_NULL属性是指课程被删除后
    		这个外键这一列被置空,它必须和```null = True,blank = True```
    		连用,否则都不能为空怎么置空呢
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    3.orm

    Python、PHP、Java是一种开发语言,而MySQL、SQL Server则采用数据库语言,不同语言之间如何实现互操作。
    SQL语言包括包括数据定义语言DDL、数据控制语言DCL、数据查询语言DQL、数据操作语言DML等,例如INSERT、DELETE、SELECT、UPDATE操作。
    作为开发人员,应该把精力放在核心业务代码的编写上面,而不应该花太多精力跟数据库语言打交道。
    ORM(Object-Relational Mapping,对象关系映射)技术可以看做是开发者和数据库之间的桥梁,用于实现数据库和   
    编程语言之间的映射,本质上来看,ORM就是将SQL操作和编程语言操作做了一个翻译。
    通过ORM技术来操作数据库,使得开发者无需接触SQL语句,而直接操作对象的属性和方法,大大提高了开发效率。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    orm的功能

    • 映射技术:数据类型映射、类映射、关系映射。例如,每一张数据库表对应开发语言的类,每一个数据字段对应类中的属性。
    • CRUD操作:CRUD即增删查改操作,在SQL语句中通过Insert、Select、Update、Delete来实现,在ORM库中则需要
      通过对应的函数来实现,例如Django ORM通过get、filter、save、delete函数进行操作。
    • 缓存优化:(惰性操作)从数据库查询到的数据以类对象的形式保存在内存,用于随时提取;真正需要查询结果时才执行数据库的select操作,而不是在ORM查询命令执行时查询数据库。

    4.models的属性与字段(field)

    AutoField:一个自动递增的整形字段,通常用于主键
    
    CharField:字符串字段,用于输入较短的字符,对应与HTML里面
    
    TextField:文本字段,用于输入较多的字符,对应html标签 ;
    
    EmailField:邮箱字段,用于输入带有Email格式的字符
    
    DateFiled
    
    TimeFiled
    
    DateTimeField:日期字段,支持时间输入
    
    ImageField:用于上传图片并验证图片合法性,需定义upload_to参数,使用本字段需安装python pillow等图片库
    
    IntegerField:整数字段,用于保持整数信息
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    属性

    primary_key:设置True or False,定义此字段是否为主键
    default:设置默认值,可以设置默认的文本、时间、图片、时间等
    null:设置True or False,是否允许数据库字段为Null,默认为False
    blank:设置True or False,定义是否运行用户不输入,默认为False;若为True,则用户可以不输入此字段
    max_length:设置默认长度,一般在CharField、TextField、EmailField等文本字段设置
    verbose_name:设置该字段的名称,所有字段都可以设置,在Web页面会显示出来(例如将英文显示为中文)
    choices:设置该字段的可选值,本字段的值是一个二维元素的元祖;元素的第1个值为实际存储的值,第2个值为HTML页面显示的值
    upload_to:设置上传路径,ImageField和FileField字段需要设置此参数,如果路径不存在,会自动创建
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    5.Meta类属性

    1. verbose_name:设置对象名称(例如usecms),若没有设置,则默认为该类名的小写分词形式,例如类名为CamelCase会被转换为camel case;
    2.verbose_name_plural:设置对象名称复数(例如usercms),一般设置跟verbose_name一样,verbose_name_plural=verbose_name否则会默认加s;
    3. db_table:设置映射的数据表名,默认为“应用名_模型名”,即用该模型所在app的名称加本模型类的名称
    4.proxy:设置True or False,设置本模型及所有继承本模型的子模型是否为代理模型;
    5. abstract:设置True or False,设置本模型类是否为抽象基类;如果是抽象基类,那么是不会创建这张表的,这张表用来作为基类被其他的表继承
    
    • 1
    • 2
    • 3
    • 4
    • 5

    二、数据库的操作

    1.查询

    modelname.object.all()取出所有的数据
    modelname.object.get(pk=id)查询出符合筛选条件数据(一条),如果查到多条或者没有查到会报错
    modelname.object.filter(....)查询出符合筛选条件的数据集(一条或者多条),如果对象不存在会返回一个空的列表,而不会报错。
    ModelName.Objects.exclude( )返会不符合筛选条件的数据集
    
    • 1
    • 2
    • 3
    • 4

    2.增加

    代码如下:

    #常规的赋值增加
    field1 = models.CharField()
    field2 = modelsEmailField()
    modelname.object.save()
    #or 利用create方法
    modelname.object.create(field1=models.CharField())
    user_cms = UserCMS.objects.create(username=username, password=password)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3.删除

    在查询的方法后面加上.delete()

    4.排序查询

    代码如下:

    ModelName.Objects.all( ).order_by('xxx')
    
    • 1

    5.切片

    代码如下:

    #ModelName.Objects.all( ).order_by('xxx')[a:b]
    all_interviews = Interview.objects.all().order_by('-read_counts')[:6]
    recommended_interviews = Interview.objects.filter(company=recommended_tag).exclude(id=int(interview_id)).order_by('-read_counts')[:3]
    
    • 1
    • 2
    • 3

  • 相关阅读:
    Nginx 的基本介绍和使用
    Linux/shell命令
    Oracle中分割字符串的方法
    【动态规划】—— 线性DP
    QT 消息对话框
    力扣215. 数组中的第K个最大元素
    态路小课堂丨400G QSFP112—助力IDC数据中心升级
    (附源码)SSM宠物领养系统 毕业设计 031654
    create® 3入门教程-按钮和光环与用户进行交互
    nvm使用的注意事项和常用命令。
  • 原文地址:https://blog.csdn.net/m0_56969616/article/details/126092137