iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Django项目如何给数据库添加约束
  • 462
分享到

Django项目如何给数据库添加约束

2024-04-02 19:04:59 462人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

只要你的web开发知识不是语文老师教的,那么你应该已经知道一个合格的开发者应该永远抱着怀疑的眼光看用户提交的数据。你不仅需要在前端通过表单或其它方式进行验证,还需要在后台视图拿到用户

只要你的web开发知识不是语文老师教的,那么你应该已经知道一个合格的开发者应该永远抱着怀疑的眼光看用户提交的数据。你不仅需要在前端通过表单或其它方式进行验证,还需要在后台视图拿到用户发送的数据后再对其进行验证一遍。假如有一天你开发一个少儿不宜的网站,你的用户模型里有年龄(age)这个字段而你要求每个注册用户年龄都大于18岁,在Django中你当然可以自定义表单的clean方法, 自定义validators或者重写模型的save方法对年龄字段进行验证。然而你想过没有一件事没有?这能阻止某个员工或用户通过DjanGo的admin后台或数据库可视化工具数据库进行修改,把用户的年龄修改到18岁以下吗?当然不能。

划重点:前后端的数据验证并不能保证数据库里数据的正确性和有效性,在数据库层面添加一些约束条件是最根本的解决方法。

今天我们就来看下如何在Django项目中给数据库添加约束(Constraints)。

什么是数据库约束(db constraints)基本常识

数据库约束(Contraints)是在数据库层面对表中的数据进行进一步的限制, 保证数据的正确性、有效性和完整性(data integrity)。 约束通常与一个表相关联,并使用CREATE CONSTRAINT或CREATE ASSERTiosql语句创建。他们定义数据库中的数据必须符合的某些属性。他们可以应用于列,整个表格,多个表格或整个模式。

常见的约束条件有:

  • not null - 列中的每个值都不能为NULL
  • primary key - 指定列中的值对于表中的每一行必须是唯一的,而不是NULL ; 
  • unique - 对于表中的每一行必须是唯一的
  • check - 指定一个表达式,为了满足约束条件,它必须计算为真

在Django中我们可以借助于它的ORM,而不是原始SQL语句创建约束,所以对SQL语句不熟悉的不用担心看不懂本文。not null和primary key这两个约束Django通常在创建数据表时会自动帮你加上,比如primary key永远是唯一的。如果你在定义模型时给某个字段设置了null=True, 那么Django就会取消not null的自动约束。

今天我们着重看下如何添加unique和check这两个常用的数据库约束。

UniqueConstraint (唯一约束)

假如我们有如下一个员工(employee)模型,我们希望让姓名(name)和email这个组合变得唯一,我们可以在Meta选项中定义一个unique_together元组。这样Django会自动为你创建数据库约束。

同样需要unique_together的字段组合还有(room, date)等。当你试图注册相同用户名和用户email时,你会得到如下报错:

由于unique_together这个方法将来会被淘汰,Django 2.2后建议在Meta.constraints选项中定义UniqueConstraints。它有两个属性,一是需要unique的字段或字段组合(fields),二是要给它取个名字(name)。

CheckConstraint(条件约束)

条件约束确保一个模型实例只有满足一定的规则条件后才被创建,不满足条件的数据不会存入到数据库。下例增加了一个对员工年龄的约束,只有大于18岁的才能注册。

注意

无论你使用UniqueConstraint还是CheckConstraint都必须给它取一个独一无二的名字。

小结

前后端数据验证并不能总是保证数据库里数据的有效性和完整性。Django中可以通过Meta.constraints选项轻松定义数据库层面的UniqueConstraint(唯一约束)和CheckConstraint(条件约束)。新知识学到了吗?欢迎留言。

以上就是Django项目如何给数据库添加约束的详细内容,更多关于Django 给数据库添加约束的资料请关注编程网其它相关文章!

--结束END--

本文标题: Django项目如何给数据库添加约束

本文链接: https://www.lsjlt.com/news/125052.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Django项目如何给数据库添加约束
    只要你的Web开发知识不是语文老师教的,那么你应该已经知道一个合格的开发者应该永远抱着怀疑的眼光看用户提交的数据。你不仅需要在前端通过表单或其它方式进行验证,还需要在后台视图拿到用户...
    99+
    2022-11-12
  • DB2数据库怎么添加验证约束
    小编给大家分享一下DB2数据库怎么添加验证约束,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!  DB2数据库如何添加验证约束  ...
    99+
    2022-10-18
  • MySQL数据库如何给表设置约束详解
    目录一、PK(主键约束)1、什么是主键?2、怎么设置主键?二、FK(外键约束)1、什么是外键2、怎么设置外键三、unique(唯一约束)1、什么是唯一约束?2、如何设置唯一约束四、n...
    99+
    2022-11-13
  • 编写Vue项目,如何给数组的第一位添加对象数据
    目录Vue给数组第一位添加对象数据给数组添加新对象并赋值Vue给数组第一位添加对象数据 核心代码如下:      this.menuBar.unshift({           t...
    99+
    2022-11-13
  • plsql如何给表添加数据
    在PL/SQL中,可以使用INSERT语句来给表添加数据。INSERT语句的基本语法如下:```INSERT INTO 表名 (列1...
    99+
    2023-10-07
    plsql
  • sql数据库唯一约束如何设置
    在SQL数据库中,可以通过以下方式设置唯一约束:1. 在创建表时设置唯一约束:   ```sql   CREAT...
    99+
    2023-09-05
    sql数据库
  • Java中如何给数据库加密配置项
    这篇文章主要讲解了“Java中如何给数据库加密配置项”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中如何给数据库加密配置项”吧!先看一份典型的配置文件... 省略 ...## 配置M...
    99+
    2023-06-02
  • Angular项目中如何给路径添加指定访问前缀
    这篇“Angular项目中如何给路径添加指定访问前缀”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Angular项目中如何给...
    99+
    2023-07-05
  • springboot项目数据库密码如何加密
    前言 在我们日常开发中,我们可能很随意把数据库密码直接明文暴露在配置文件中,在开发环境可以这么做,但是在生产环境,是相当不建议这么做,毕竟安全无小事,谁也不知道哪天密码就莫名其妙泄...
    99+
    2022-11-12
  • 如何理解关系型数据库的约束机制
    这篇文章将为大家详细讲解有关如何理解关系型数据库的约束机制,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一. 关系型数据库市场上主流的关系型数据库:Orac...
    99+
    2022-10-19
  • SQL Server数据库如何创建表及约束条件
    这篇文章主要介绍“SQL Server数据库如何创建表及约束条件”,在日常操作中,相信很多人在SQL Server数据库如何创建表及约束条件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”S...
    99+
    2023-07-04
  • visual数据库如何添加数据
    要向Visual数据库添加数据,您可以使用INSERT INTO语句。以下是一些基本的步骤:1. 首先,打开Visual数据库管理系...
    99+
    2023-08-16
    visual 数据库
  • AndoridSQLite数据库开发中如何为数据库添加添加空表
    AndoridSQLite数据库开发中如何为数据库添加添加空表,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。AndoridSQLite数据库开发为数据库添加添加空表如果开发...
    99+
    2023-06-05
  • mysql如何给千万数据表添加字段
    要给千万数据表添加字段,可以使用ALTER TABLE语句。首先,连接到MySQL数据库并选择要添加字段的数据库。然后,使用以下语法...
    99+
    2023-09-28
    mysql
  • 利用python3如何给数据添加高斯噪声
    目录Background原始数据源码总结Background 高斯噪声,顾名思义是指服从高斯分布(正态分布)的一类噪声。有的时候我们需要向标准数据中加入合适的高斯噪声让数据更加符合实...
    99+
    2022-11-13
  • 如何理解数据库设计的完整性约束表现
    这篇文章将为大家详细讲解有关如何理解数据库设计的完整性约束表现,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。数据完整性是指数据的正确性、完备性和一致性,是衡...
    99+
    2022-10-19
  • 如何用md5函数给数据库加密
    在MySQL数据库中使用md5函数进行加密的方法首先,在MySQL数据库中新建一个test表;CREATE TABLE test (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varcha ...
    99+
    2022-10-09
  • eclipse如何向数据库中添加数据
    要将数据添加到数据库中,您需要执行以下步骤:1. 首先,您需要创建一个数据库连接。在Eclipse中,您可以使用JDBC(Java ...
    99+
    2023-08-14
    eclipse 数据库
  • java如何给链接数据库加密
    在java中使用DES算法对数据库进行加密,具体方法如下:import java.security.Key;import java.security.SecureRandom;import javax.crypto.Cipher;impor...
    99+
    2022-10-17
  • springboot如何给数据库地址加密
    使用pringboot对数据库地址进行加密的方法首先,需要在springboot项目中导入依赖;com.github.ulisesbocchiojasypt-spring-boot-starter2.0.0依赖导入好后,在springboo...
    99+
    2022-10-07
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作