美文网首页
Django模型[ORM框架简介]

Django模型[ORM框架简介]

作者: 錦魚 | 来源:发表于2018-10-18 13:31 被阅读0次

    ORM框架

    • O是object,也就 类对象 的意思,R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思,M是mapping,是 映射 的意思。在ORM框架中,它帮我们把类和数据表进行了一个映射,可以让我们 通过类和类对象就能操作它所对应的表格中的数据 。ORM框架还有一个功能,它可以 根据我们设计的类自动帮我们生成数据库中的表格 ,省去了我们自己建表的过程。
    • django中内嵌了ORM框架,不需要直接面向数据库编程,而是定义模型类,通过模型类和对象完成数据表的增删改查操作。
      使用django进行数据库开发的步骤如下:
      1.在models.py中定义模型类
      2.迁移
      3.通过类和对象完成数据增删改查操作
    • 下面我们以保存图书信息为例来给大家介绍Django中进行数据库开发的整个流程。

    进入虚拟环境h1_django。

    workon h1_django

    创建项目

    django-admin startproject test2

    创建应用

    python manage.py startapp bookest

    mysql添加数据库test2

    creat database test2 charset=utf8;

    修改配置文件
    #INSTALLED_APPS项添加
    'booktest',
    
    DATABASES = {
      'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test2', #数据库名字,
        'USER': 'root', #数据库登录用户名
        'PASSWORD': 'mysql', #数据库登录密码
        'HOST': 'localhost', #数据库所在主机
        'PORT': '3306', #数据库端口
      }
    }
    

    添加test2/init.py文件

    import pymysql
    pymysql.install_as_MySQLdb()
    

    添加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')#英雄与图书表的关系为一对多,所以属性定义在英雄模型类中
    
    生成迁移文件与执行

    python manage.py makemigrations
    python manage.py migrate

    底层部分完成


    插入数据

    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);
    
    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);
    

    定义视图

    添加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('/')
    

    配置url

    添加test2/urls.py

    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),
    ]
    

    配置文件添加模板

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

    创建templates/booktest/index.html文件

    <html>
    <head>
    <meta ='utf8'>
    <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>

    相关文章

      网友评论

          本文标题:Django模型[ORM框架简介]

          本文链接:https://www.haomeiwen.com/subject/ujwjzftx.html