Django篇章3之----ORM框架初识

ORM框架

全名: 对象-关系-映射 (Object-Relational-Mapping 简称ORM)

本章内容基于Django框架引出, 不适者绕道

ORM模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象, 简单来说, 将程序中产生的数据持久化到关系数据库中, ORM提供了实现持久化层的一种模式,采用映射元数据来描述对象关系的映射, 使的ORM 中间件可能在任何一个应用的业务逻辑层和数据层之间充当桥梁.

Django 把表模型定义为 Model,他需要继承自django.db.models中的 Model 类,只要是与数据表相关的操作,都需要继承这个类。

同时ORM对数据的增删查改也提供了一些接口, 例如 F 查询 , Q 查询

针对数据库中的字段类型, Django ORM “XXXFiled” 见表如下:

字段说明字段属性
AutoFiled默然自增主键(Primary_key=Ture), Django 默认建立id字段为主键。
CharFiled字符类型Max_length=32,字符长度需要明确
IntgerFiled整型 int
DateFiled年月日时间类型auto_now=True,数据被更新就会更新时间 ;auto_now_add=True,数据第一次参数时产生。
DateTimeFiled年月日小时分钟秒时间类型auto_now=True,数据被更新就会更新时间; auto_now_add=True,数据第一次参数时产生。
DecimalFiled混合精度的小数类型max_digits=3,限定数字的最大位数(包含小数位);decimal_places=2,限制小数的最大位数。
BooleanFiled布尔字段,对应数据库 tinyint 类型数据长度只有1位。值为True或False
TextFiled用于大文本

熟悉ORM属性类型后, 加下来就是练手了(搭一个简单的登录页面, 主要体现连接数据库的方便)

完全使用对象处理数据库的存取

创建django项目

django-admin startproject First

创建app

python manage.py startapp app01

一. 在app01的models下建UserInfo类

from django.db import models
这里用到的属性在开头都已经介绍, 不懂返回顶上看
class UserInfo(models.Model):
    设置表id字段
    id = models.AutoField(primary_key=True)
    名字字段
    name = models.CharField(max_length=32)
	密码字段
    password = models.CharField(max_length=64,null=True)
	性别字段
    gender = models.ImageField(default=0)
	省份字段
    province = models.CharField(max_length=32,null=True)

类创建完成后需要执行两行代码 (本机数据库db.sqlite3, 不用下载, 运行两行代码后自动生成)

  1. python manage.py makemigrations
  2. python manage.py migrate

完成数据库建表字段

二. templates创建注册html文件(不多解释, 懂得自然懂)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    临时路径, 需要的自己下载, bootstrap官网
    <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css">
    <title>注册</title>
</head>
<body>
<div class="container-fluid">
    <div class="row">
        <div class="col-md-6 col-md-offset-3">
            <h1 class="text-center">注册功能</h1>
            <div class="panel panel-primary">
                <div class="panel-heading">欢迎来到注册页面</div>
                <div class="panel-body">
                    <form action="" method="post">
                        <div class="form-group">
                            <label for="">用户名</label>
                            <input type="text" name="name" class="form-control">
                        </div>
                        <div class="form-group">
                            <label for="">密码</label>
                            <input type="password" name="password" class="form-control">
                        </div>
                        <div class="form-group">
                            <label for="">性别</label>
                            <div class="radio">
                                <label>
                                   <input type="radio" name="gender" value="1" checked></label>
                            </div>
                            <div class="radio">
                                <label>
                                    <input type="radio" name="gender" value="2"></label>
                            </div>
                        </div>
                        <div class="form-group">
                            <label for="">省份</label>
                            <select class="form-control" name="province">
                                <option value="山东省">山东省</option>
                                <option value="江苏省">江苏省</option>
                                <option value="上海市">上海市</option>
                                <option value="浙江省">浙江省</option>
                                <option value="陕西省">陕西省</option>
                            </select>
                        </div>
                        <div class="text-center">
                            <input type="submit" value="注册" class="btn btn-danger">
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>

</body>
</html>

三. views文件下创建如下内容

from django.shortcuts import render,HttpResponse,redirect
from app01 import models

def register(request):
    判断请求状态
    if request.method=="GET":
        get请求返回注册页面
        return render(request,"register.html")
    elif request.method=="POST":
        post请求把用户数据保存起来
        rest = request.POST
        获取用户数据
        name = rest.get("name")
        pwd = rest.get("password")
        gender = rest.get("gender")
        province = rest.get("province")
        print(rest)
        保存数据, 调用之前写的数据库接口类,
        user = models.UserInfo(name=name,password=pwd,gender=gender,province=province)
        必须调用save()属性, 否则不保存
        user.save()
        必须返回一个状态, 状态可以是一个页面
        return HttpResponse("ok")

四. 路由配置

settings配置如下

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    "app01.apps.App01Config",  //将app添加到这里
]

设置静态文件路径, 在最后位置
# 再配一个STATICFILES_DIRS=列表(列表内写路径),单词一个字母都不能错
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,"static"),
]

五. urls路由配置

urlpatterns = [
    path('admin/', admin.site.urls),
    path("register/",register)
]

ORM框架: 为了解决面向对象与关系数据库存在不匹配的现象.

ORM 框架的优缺点

优点:

​ 使用该模块只需要面向对象编程, 不需要面向sql语句编程, 对数据库操作转换为对类属性操作, 不用我们编写各种SQL语句

​ 实现数据模型与数据库解耦性, 屏蔽了不同数据库上的差异化操作, 不再关注数据库内部的细节操作, 通过更改配置就可以实现数据库的更换而无需更改代码

​ 提高开发效率, 降低开发成本, 是开发更加对象化, 可移植, 很方便地引入数据缓存之类的附加功能

缺点:

​ 相比直接使用SQL语句操作数据库会损失性能, ORM的优势还是非常突出的, 因为这种模型和关系型数据库之间的转方式, 让一些开发者逐渐遗忘原生SQL语句, 导致丧失SQL优化能力.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值