orm
整篇文章参考的地址
1. 数据库模型层使用了大量的 ORM(对象关系映射),解释ORM
Django和其他大多数现代Web框架一样,依赖一个强大的DAO,数据访问层,试图将底层的关系数据库和Python的面向对象的特质联系起来,使用ORM的几点好处:封装有用的方法,可移植性,安全性,表现力
安全性上:避免了SQL注入攻击???
2. Django丰富的变量类型
Django模型定义的方式如下
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author)
length = models.IntergerField()
- 用Python的类来表示对象,而对象则通常映射到SQL中的表,属性对应列,并且这些属性本身也是对象, 对象属性是 Field 类的子类;这些子类通常还会定义一定程度的抽象,
CharField/TextField -- 都是用于保存文本,区别在于一个定长,一个无限长
EmailField/URLField/IPAddressField -- 就是CharField加上验证功能
BooleanField/NullBooleanField
FileField/FilePathField -- FileField只在数据库中保存了一个文件的路径,和它接近的FileFieldPath
4. 主键的功能,没有明确指定,Django会自动生成主键 id(AutoField,自增整数),你希望有更多的控制主键,只需要在某个变量上指定 primary_key = True,这个变量会取代 id 成为这个表的主键
5.ForeignKey设置外键的方式,一对多的方式
正面定义的方式
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey("Author")
class Author(models.Model):
name = models.CharField(max_length=100)
反向,根据关系追溯回来,因为这是一种多对一的关系,多个子对象可以引用同一个父对象,而父对象可以访问到一组子对象。
#取一本书“Moby Dick”
book = Book.objects.get(title="Moby Dick")
#取作者名字
author = Book.author
#获取这个作者所有的书
books = author.book_set.all()
6.多对多的方式(ManyToManyField),一个作者有多本书,一本书也有多个作者,由于SQL没有定义这种关系,必须通过外键用它能理解的方式实现多对多,Django提供了第二种关系对象映射变量 ManyToManyField,指定一个特殊的选项 through 来指向一个显式的中间模型类,更方便你的手动管理关系的两端,ManyToManyField的秘密在于它在背后创建了一张新的表来满足这类关系的查询的需要,而这张表用的则是SQL外键,其中每一行都代表了两个对象的一个关系,同时包含了两端的外键
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author, through = "Authoring")
class Authoring(models.Model):
collaboration_type = models.CharField(max_length=100)
book = model.ForeignKey(Book)
author = model.ForeignKey(Author)