django框架之模型

ORM简介

ORM,全拼Object-Relation Mapping,中文意为对象-关系映射,是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射ORM系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。为了解决这个不匹配的现象,对象关系映射技术应运而生。O/R中字母O起源于"对象"(Object),而R则来自于"关系"(Relational)。几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和用户界面层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。目前流行的ORM产品如Java的Hibernate,.Net的EntityFormerWork等。

在MVC框架中的Model模块中都包括ORM,对于开发人员主要带来了如下好处:

  • 实现了数据模型与数据库的解耦,通过简单的配置就可以轻松更换数据库,而不需要修改代码。
  • 只需要面向对象编程,不需要面向数据库编写代码。
  • 在MVC中Model中定义的类,通过ORM与关系型数据库中的表对应,对象的属性体现对象间的关系,这种关系也被映射到数据表中。

Django框架中ORM示意图如下:

定义模型类

  • 模型类被定义在"应用/models.py"文件中,此例中为"booktest/models.py"文件。
  • 模型类必须继承自Model类,位于包django.db.models中。
  • 提示:对于重要数据使用逻辑删除。

示例演示

接下来首先以"图书-英雄"管理为例进行演示,复习一下昨天的内容。

1.打开booktest/models.py文件,定义模型类如下

from django.db import models

#定义图书模型类BookInfo
class BookInfo(models.Model):
    btitle = models.CharField(max_length=20)#图书名称
    bpub_date = models.DateField()#发布日期
    bread = models.IntegerField(default=0)#阅读量
    bcomment = models.IntegerField(default=0)#评论量
    isDelete = models.BooleanField(default=False)#逻辑删除

#定义英雄模型类HeroInfo
class HeroInfo(models.Model):
    hname = models.CharField(max_length=20)#英雄姓名
    hgender = models.BooleanField(default=True)#英雄性别
    isDelete = models.BooleanField(default=False)#逻辑删除
    hcomment = models.CharField(max_length=200)#英雄描述信息
    hbook = models.ForeignKey(‘BookInfo‘)#英雄与图书表的关系为一对多,所以属性定义在英雄模型类中

2.迁移

生成迁移文件。

python manage.py makemigrations

生成迁移文件的时候出现错误,把数据库切换成了mysql,需要安装pymysql模块之后,Django框架才可以操作mysql数据库。安装命令如下:

pip install pymysql

安装成功之后,在test2/_init_.py文件中加上如下代码:

import pymysql
pymysql.install_as_MySQLdb()

然后执行如下命令

python manage.py makemigrations
python manage.py migrate

3.测试数据

在数据库命令行中,复制如下语句执行,向booktest_bookinfo表中插入测试数据:

insert into booktest_bookinfo(btitle,bpub_date,bread,bcomment,isDelete) values
(‘射雕英雄传‘,‘1980-5-1‘,12,34,0),
(‘天龙八部‘,‘1986-7-24‘,36,40,0),
(‘笑傲江湖‘,‘1995-12-24‘,20,80,0),
(‘雪山飞狐‘,‘1987-11-11‘,58,24,0);

再复制如下语句执行,向booktest_heroinfo表中插入测试数据:

insert into booktest_heroinfo(hname,hgender,hbook_id,hcomment,isDelete) values
(‘郭靖‘,1,1,‘降龙十八掌‘,0),
(‘黄蓉‘,0,1,‘打狗棍法‘,0),
(‘黄药师‘,1,1,‘弹指神通‘,0),
(‘欧阳锋‘,1,1,‘蛤蟆功‘,0),
(‘梅超风‘,0,1,‘九阴白骨爪‘,0),
(‘乔峰‘,1,2,‘降龙十八掌‘,0),
(‘段誉‘,1,2,‘六脉神剑‘,0),
(‘虚竹‘,1,2,‘天山六阳掌‘,0),
(‘王语嫣‘,0,2,‘神仙姐姐‘,0),
(‘令狐冲‘,1,3,‘独孤九剑‘,0),
(‘任盈盈‘,0,3,‘弹琴‘,0),
(‘岳不群‘,1,3,‘华山剑法‘,0),
(‘东方不败‘,0,3,‘葵花宝典‘,0),
(‘胡斐‘,1,4,‘胡家刀法‘,0),
(‘苗若兰‘,0,4,‘黄衣‘,0),
(‘程灵素‘,0,4,‘医术‘,0),
(‘袁紫衣‘,0,4,‘六合拳‘,0);

4.定义视图

打开booktest/views.py文件,定义视图代码如下:

from django.shortcuts import render,redirect
from booktest.models import *
from datetime import date

#查询所有图书并显示
def index(request):
    list=BookInfo.objects.all()
    return render(request,‘booktest/index.html‘,{‘list‘:list})

#创建新图书
def create(request):
    book=BookInfo()
    book.btitle = ‘流星蝴蝶剑‘
    book.bpub_date = date(1995,12,30)
    book.save()
    #转向到首页
    return redirect(‘/‘)

#逻辑删除指定编号的图书
def delete(request,id):
    book=BookInfo.objects.get(id=int(id))
    book.delete()
    #转向到首页
    return redirect(‘/‘)

5.配置url

打开test2/urls.py文件,配置url如下:

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r‘^admin/‘, include(admin.site.urls)),
    #引入booktest的url配置
    url(r‘^‘,include(‘booktest.urls‘)),
]

在booktest应用下创建urls.py文件,代码如下:

from django.conf.urls import url
from booktest import views

urlpatterns=[
    url(r‘^$‘,views.index),
    url(r‘^delete(\d+)/$‘,views.delete),
    url(r‘^create/$‘,views.create),
]

6.创建模板

打开test2/settings.py文件,配置模板查找目录TEMPLATES的DIRS。

‘DIRS‘: [os.path.join(BASE_DIR,‘templates‘)],

创建templates/booktest/index.html文件。

模板代码如下:

<html>
<head>
    <title>复习案例</title>
</head>
<body>
<a href="/create/">创建</a>
<ul>
{%for book in list%}
    <li>{{book.btitle}}--<a href="/delete{{book.id}}/">删除</a></li>
{%endfor%}
</ul>
</body>
</html>

7.运行

运行服务器。

python manage.py runserver

在浏览器中查看。

定义属性

Django根据属性的类型确定以下信息:

  • 当前选择的数据库支持字段的类型
  • 渲染管理表单时使用的默认html控件
  • 在管理站点最低限度的验证

django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。

默认创建的主键列属性为id,可以使用pk代替,pk全拼为primary key。

属性命名限制:

  • 不能是python的保留关键字。
  • 不允许使用连续的下划线,这是由django的查询方式决定的,在第4节会详细讲解查询。
  • 定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法如下:
属性=models.字段类型(选项)

字段类型

使用时需要引入django.db.models包,字段类型如下:

  • AutoField:自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性。
  • BooleanField:布尔字段,值为True或False。
  • NullBooleanField:支持Null、True、False三种值。
  • CharField(max_length=字符长度):字符串。
    • 参数max_length表示最大字符个数。
  • TextField:大文本字段,一般超过4000个字符时使用。
  • IntegerField:整数。
  • DecimalField(max_digits=None, decimal_places=None):十进制浮点数。
    • 参数max_digits表示总位数。
    • 参数decimal_places表示小数位数。
  • FloatField:浮点数。
  • DateField[auto_now=False, auto_now_add=False]):日期。
    • 参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false。
    • 参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false。
    • 参数auto_now_add和auto_now是相互排斥的,组合将会发生错误。
  • TimeField:时间,参数同DateField。
  • DateTimeField:日期时间,参数同DateField。
  • FileField:上传文件字段。
  • ImageField:继承于FileField,对上传的内容进行校验,确保是有效的图片。

选项

通过选项实现对字段的约束,选项如下:

  • null:如果为True,表示允许为空,默认值是False。
  • blank:如果为True,则该字段允许为空白,默认值是False。
  • 对比:null是数据库范畴的概念,blank是表单验证范畴的。
  • db_column:字段的名称,如果未指定,则使用属性的名称。
  • db_index:若值为True, 则在表中会为此字段创建索引,默认值是False。
  • default:默认值。
  • primary_key:若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用。
  • unique:如果为True, 这个字段在表中必须有唯一值,默认值是False。

综合演示

修改booktest/models.py中的模型类,代码如下:


from django.db import models

#定义图书模型类BookInfo
class BookInfo(models.Model):
    #btitle = models.CharField(max_length=20)#图书名称
    btitle = models.CharField(max_length=20, db_column=‘title‘)#通过db_column指定btitle对应表格中字段的名字为title
    bpub_date = models.DateField()#发布日期
    bread = models.IntegerField(default=0)#阅读量
    bcomment = models.IntegerField(default=0)#评论量
    isDelete = models.BooleanField(default=False)#逻辑删除

#定义英雄模型类HeroInfo
class HeroInfo(models.Model):
    hname = models.CharField(max_length=20)#英雄姓名
    hgender = models.BooleanField(default=True)#英雄性别
    isDelete = models.BooleanField(default=False)#逻辑删除
    #hcomment = models.CharField(max_length=200)#英雄描述信息
    hcomment = models.CharField(max_length=200, null=True, blank=False) #hcomment对应的数据库中的字段可以为空,但通过后台管理页面添加英雄信息时hcomment对应的输入框不能为空
    hbook = models.ForeignKey(‘BookInfo‘)#英雄与图书表的关系为一对多,所以属性定义在英雄模型类中
 

然后生成迁移文件并执行迁移命令,最后查看test2数据库中的内容。

字段查询

实现sql中where的功能,调用过滤器filter()、exclude()、get(),下面以filter()为例。

通过"属性名_id"表示外键对应对象的id值。

语法如下:

说明:属性名称和比较运算符间使用两个下划线,所以属性名不能包括多个下划线。

 
属性名称__比较运算符=值

条件运算符

1) 查询等

exact:表示判等。

例:查询编号为1的图书。

list=BookInfo.objects.filter(id__exact=1)
可简写为:
list=BookInfo.objects.filter(id=1)
2) 模糊查询

contains:是否包含。

说明:如果要包含%无需转义,直接写即可。

例:查询书名包含‘传‘的图书。

list = BookInfo.objects.filter(btitle__contains=‘传‘)

startswith、endswith:以指定值开头或结尾。

例:查询书名以‘部‘结尾的图书

list = BookInfo.objects.filter(btitle__endswith=‘部‘)

以上运算符都区分大小写,在这些运算符前加上i表示不区分大小写,如iexact、icontains、istartswith、iendswith.

3) 空查询

isnull:是否为null。

例:查询书名不为空的图书。

list = BookInfo.objects.filter(btitle__isnull=False)
4) 范围查询

in:是否包含在范围内。

例:查询编号为1或3或5的图书

list = BookInfo.objects.filter(id__in=[1, 3, 5])
5) 比较查询

gt、gte、lt、lte:大于、大于等于、小于、小于等于。

例:查询编号大于3的图书

list = BookInfo.objects.filter(id__gt=3)

不等于的运算符,使用exclude()过滤器。

例:查询编号不等于3的图书

list = BookInfo.objects.exclude(id=3)
6) 日期查询

year、month、day、week_day、hour、minute、second:对日期时间类型的属性进行运算。

例:查询1980年发表的图书。

list = BookInfo.objects.filter(bpub_date__year=1980)

例:查询1980年1月1日后发表的图书。

list = BookInfo.objects.filter(bpub_date__gt=date(1990, 1, 1))

F对象

之前的查询都是对象的属性与常量值比较,两个属性怎么比较呢? 答:使用F对象,被定义在django.db.models中。

语法如下:

F(属性名)

例:查询阅读量大于等于评论量的图书。

from django.db.models import F
...
list = BookInfo.objects.filter(bread__gte=F(‘bcomment‘))

可以在F对象上使用算数运算。

例:查询阅读量大于2倍评论量的图书。

list = BookInfo.objects.filter(bread__gt=F(‘bcomment‘) * 2)

Q对象

多个过滤器逐个调用表示逻辑与关系,同sql语句中where部分的and关键字。

例:查询阅读量大于20,并且编号小于3的图书。

list=BookInfo.objects.filter(bread__gt=20,id__lt=3)
或
list=BookInfo.objects.filter(bread__gt=20).filter(id__lt=3)

如果需要实现逻辑或or的查询,需要使用Q()对象结合|运算符,Q对象被义在django.db.models中。

语法如下:

Q(属性名__运算符=值)

例:查询阅读量大于20的图书,改写为Q对象如下。

from django.db.models import Q
...
list = BookInfo.objects.filter(Q(bread__gt=20))

Q对象可以使用&、|连接,&表示逻辑与,|表示逻辑或。

例:查询阅读量大于20,或编号小于3的图书,只能使用Q对象实现

list = BookInfo.objects.filter(Q(bread__gt=20) | Q(pk__lt=3))

Q对象前可以使用~操作符,表示非not。

例:查询编号不等于3的图书。

list = BookInfo.objects.filter(~Q(pk=3))

聚合函数

使用aggregate()过滤器调用聚合函数。聚合函数包括:Avg,Count,Max,Min,Sum,被定义在django.db.models中。

例:查询图书的总阅读量。

from django.db.models import Sum
...
list = BookInfo.objects.aggregate(Sum(‘bread‘))

注意aggregate的返回值是一个字典类型,格式如下:

 {‘聚合类小写__属性名‘:值}
  如:{‘sum__bread‘:3}

使用count时一般不使用aggregate()过滤器。

例:查询图书总数。

list = BookInfo.objects.count()

注意count函数的返回值是一个数字。

查询集

查询集表示从数据库中获取的对象集合,在管理器上调用某些过滤器方法会返回查询集,查询集可以含有零个、一个或多个过滤器。过滤器基于所给的参数限制查询的结果,从Sql的角度,查询集和select语句等价,过滤器像where和limit子句。

返回查询集的过滤器如下:

  • all():返回所有数据。
  • filter():返回满足条件的数据。
  • exclude():返回满足条件之外的数据,相当于sql语句中where部分的not关键字。
  • order_by():对结果进行排序。

返回单个值的过滤器如下:

  • get():返回单个满足条件的对象

    • 如果未找到会引发"模型类.DoesNotExist"异常。
    • 如果多条被返回,会引发"模型类.MultipleObjectsReturned"异常。
  • count():返回当前查询结果的总条数。
  • aggregate():聚合,返回一个字典。

判断某一个查询集中是否有数据:

  • exists():判断查询集中是否有数据,如果有则返回True,没有则返回False。

两大特性

  • 惰性执行:创建查询集不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代、序列化、与if合用。
  • 缓存:使用同一个查询集,第一次使用时会发生数据库的查询,然后把结果缓存下来,再次使用这个查询集时会使用缓存的数据。

示例:查询所有,编辑booktest/views.py的index视图,运行查看。

list=BookInfo.objects.all()

模型类关系

关系字段类型

关系型数据库的关系包括三种类型:

  • ForeignKey:一对多,将字段定义在多的一端中。
  • ManyToManyField:多对多,将字段定义在任意一端中。
  • OneToOneField:一对一,将字段定义在任意一端中。
  • 可以维护递归的关联关系,使用‘self‘指定,详见"自关联"。
一对多关系

参见booktest应用中的BookInfo类和HeroInfo类。

#定义图书模型类BookInfo
class BookInfo(models.Model):
    btitle = models.CharField(max_length=20)#图书名称
    bpub_date = models.DateField()#发布日期
    bread = models.IntegerField(default=0)#阅读量
    bcomment = models.IntegerField(default=0)#评论量
    isDelete = models.BooleanField(default=False)#逻辑删除

#定义英雄模型类HeroInfo
class HeroInfo(models.Model):
    hname = models.CharField(max_length=20)#英雄姓名
    hgender = models.BooleanField(default=True)#英雄性别
    isDelete = models.BooleanField(default=False)#逻辑删除
    hcomment = models.CharField(max_length=200)#英雄描述信息
    hbook = models.ForeignKey(‘BookInfo‘)#英雄与图书表的关系为一对多,所以属性定义在英雄模型类中
多对多关系

我们下面设计一个新闻类和新闻类型类,一个新闻类型下可以用很多条新闻,一条新闻也可能归属于多种新闻类型。

重新在项目test2下新建一个应用newstest,注册应用之后,编辑newstest/models.py文件设计模型类。

class TypeInfo(models.Model):
  tname = models.CharField(max_length=20) #新闻类别

class NewsInfo(models.Model):
  ntitle = models.CharField(max_length=60) #新闻标题
  ncontent = models.TextField() #新闻内容
  npub_date = models.DateTimeField(auto_now_add=True) #新闻发布时间
  ntype = models.ManyToManyField(‘TypeInfo‘) #通过ManyToManyField建立TypeInfo类和NewsInfo类之间多对多的关系

关联查询

Django中也能实现类似于join查询。

通过对象执行关联查询

在定义模型类时,可以指定三种关联关系,最常用的是一对多关系,如本例中的"图书-英雄"就为一对多关系,接下来进入shell练习关系的查询。

由一到多的访问语法:

一对应的模型类对象.多对应的模型类名小写_set
例:
b = BookInfo.objects.get(id=1)
b.heroinfo_set.all()

由多到一的访问语法:

多对应的模型类对象.多对应的模型类中的关系类属性名
例:
h = HeroInfo.objects.get(id=1)
h.hbook

访问一对应的模型类关联对象的id语法:

多对应的模型类对象.关联类属性_id
例:
h = HeroInfo.objects.get(id=1)
h.book_id

例:查询编号为1的图书。

book=BookInfo.objects.get(pk=1)

例:获得book图书的所有英雄。

book.heroinfo_set.all()

例:获得编号为1的英雄。

hero=HeroInfo.objects.get(pk=1)

例:获得hero英雄出自的图书。

hero.hbook

通过模型类执行关联查询

由多模型类条件查询一模型类数据:

语法如下:

关联模型类名小写__属性名__条件运算符=值

如果没有"__运算符"部分,表示等于,结果和sql中的inner join相同。

例:查询图书,要求图书中英雄的描述包含‘八‘。

list = BookInfo.objects.filter(heroinfo__hcontent__contains=‘八‘)

由一模型类条件查询多模型类数据: 语法如下:

一模型类关联属性名__一模型类属性名__条件运算符=值

例:查询书名为“天龙八部”的所有英雄。

list = HeroInfo.objects.filter(hbook__btitle=‘天龙八部‘)

模型实例方法

  • str():在将对象转换成字符串时会被调用。
  • save():将模型对象保存到数据表中,ORM框架会转换成对应的insert或update语句。
  • delete():将模型对象从数据表中删除,ORM框架会转换成对应的delete语句。

模型类的属性

属性objects:管理器,是models.Manager类型的对象,用于与数据库进行交互。

当没有为模型类定义管理器时,Django会为每一个模型类生成一个名为objects的管理器,自定义管理器后,Django不再生成默认管理器objects。

为模型类BookInfo定义管理器books语法如下:

class BookInfo(models.Model):
    ...
    books = models.Manager()

管理器Manager

管理器是Django的模型进行数据库操作的接口,Django应用的每个模型类都拥有至少一个管理器。Django支持自定义管理器类,继承自models.Manager。

自定义管理器类主要用于两种情况:

  • 1.修改原始查询集,重写all()方法
  • 2.向管理器类中添加额外的方法,如向数据库中插入数据。

1.修改原始查询集,重写all()方法。

a)打开booktest/models.py文件,定义类BookInfoManager

#图书管理器
class BookInfoManager(models.Manager):
    def all(self):
        #默认查询未删除的图书信息
        #调用父类的成员语法为:super().方法名
        return super().all().filter(isDelete=False)

b)在模型类BookInfo中定义管理器

class BookInfo(models.Model):
    ...
    books = BookInfoManager()

2.在管理器类中定义创建对象的方法

对模型类对应的数据表进行操作时,推荐将这些操作数据表的方法封装起来,放到模型管理器类中。

a)打开booktest/models.py文件,定义方法create。

class BookInfoManager(models.Manager):
    ...
    #创建模型类,接收参数为属性赋值
    def create_book(self, title, pub_date):
        #创建模型类对象self.model可以获得模型类
        book = self.model()
        book.btitle = title
        book.bpub_date = pub_date
        book.bread=0
        book.bcommet=0
        book.isDelete = False
        # 将数据插入进数据表
        book.save()
        return book

b)为模型类BookInfo定义管理器books语法如下

class BookInfo(models.Model):
    ...
    books = BookInfoManager()

c)调用语法如下:

调用:book=BookInfo.books.create_book("abc",date(1980,1,1))

元选项

在模型类中定义类Meta,用于设置元信息,如使用db_table自定义表的名字。

数据表的默认名称为:

<app_name>_<model_name>
例:
booktest_bookinfo

例:指定BookInfo模型类生成的数据表名为bookinfo。

在BookInfo模型类中添加如下内容,代码如下:

#定义图书模型类BookInfo
class BookInfo(models.Model):
    ...

    #定义元选项
    class Meta:
      db_table=‘bookinfo‘ #指定BookInfo生成的数据表名为bookinfo

原文地址:https://www.cnblogs.com/Memson/p/9968952.html

时间: 2024-10-07 07:21:18

django框架之模型的相关文章

Django框架---model模型基础

ORM 映射关系: 表名  <-------> 类名 字段  <-------> 属性 表记录 <------->类实例对象 回到顶部 创建表(建立模型) 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对一的关系(one-to-one) 出版商模型:出版商有名称,所在城市以及email. 书籍模型: 书籍有书名和出版日期,一本书可能会有多个

django框架的模型类定义及操作

在settings.py中保存了数据库的连接配置信息,Django默认初始配置使用sqlite数据库. 使用MySQL数据库首先需要安装驱动程序 pip install PyMySQL 在Django的工程同名子目录的__init__.py文件中添加如下语句 from pymysql import install_as_MySQLdb install_as_MySQLdb() 作用是让Django的ORM能以mysqldb的方式来调用PyMySQL. 修改DATABASES配置信息 DATABA

Django框架之模型层 常用字段和参数

目录 一.Django ORM 常用字段和参数 1.1 常用字段 1.2 所有字段(争取记忆) 1.2.1 orm字段与MySQL字段对应关系 1.3 自定义字段 1.3 字段参数 1.3.1 DateField和DateTimeField的字段参数 二.关系字段 2.1 ForeignKey 2.1.1 字段参数 2.1.2 其余字段参数 2.2 OneToOneField 2.2.1 字段参数 2.3 ManyToManyField 2.3.1 字段参数 一些说明: 表的名称是自动生成的,如

Django框架-模型层

Django框架-模型层 一.单表查询之必知必会13条 1.时间字段中的两个关键性参数 create_time = models.DateField() # 年月日 create_time = models.DateTimeField() # 年月日时分秒 # 两个关键性参数 # auto_now:每次操作数据 都会自动刷新当前操作的时间 # auto_now_add:在创建数据的时候 会自动将创建时间记录下来 后续的修改不会影响该字段 2.搭建测试环境 在django中,你可以写一个单独测试某

django 框架模型之models常用的Field,及常见错误原因及处理方案。

1. django 模型models 常用字段 1.models.AutoField 自增列 = int(11) 如果没有的话,默认会生成一个名称为 id 的列 如果要显式的自定义一个自增列,必须设置primary_key=True. 2.models.CharField 字符串字段 必须设置max_length参数 3.models.BooleanField 布尔类型=tinyint(1) 不能为空,可添加Blank=True 4.models.ComaSeparatedIntegerFiel

Django框架(二):设计模型

1. 设计模型 我们之前操作数据库是通过写sql语句,那么能不能不写sql语句就可以操作数据库呢? 当然可以,这就要使用ORM框架了. 1.1 ORM框架 O是object,也就类对象的意思,R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思,M是mapping,是映射的意思.在ORM框架中,它帮我们把类和数据表进行了一个映射,可以让我们通过类和类对象就能操作它所对应的表格中的数据.ORM框架还有一个功能,它可以根据我们设计的类自动帮我们生成数据库中的表格,省去了我们自己建表

Django框架&lt;一&gt;

Django框架 Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. 一.django的安装实现和目录介绍 1.django实现流程 django #安装: pip3 install django 添加环境变量 #1 创建project django-admin startproject mysite ---mysite ---settings.p

Django框架

Django框架全面讲解 Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. 本文将带大家全面了解Django框架,笔者使用的版本为1.10. 1 Django流程介绍 2 Django 基本配置 一.创建django程序 终端命令:django-admin startproject sitename  (在当前目录下创建一个Django程序) I

第三百零三节,Django框架介绍

Django框架介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件.并于2005年7月在BSD许可证下发布. 这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的. Django框架,流程图