django入门【05】模型介绍——字段选项(二)

news2024/11/23 6:19:39

文章目录

    • 1、null 和 blank
      • 示例
      • 说明
      • ⭐ `null` 和 `blank` 结合使用的几种情况总结:
    • 2、choices
      • **`choices` 在 Django 中有以下几种形式:**
        • (1) **简单的列表或元组形式**
        • (2) **字典映射形式**
        • (3) **分组形式**
        • (4) **可调用对象**
        • (5)**枚举类型**
        • (6) **自定义数据类型的枚举**
    • 3. 基本 数据库 相关选项 (db_column、db_comment、db_default、db_index、db_tablespace)
    • 4. 默认值与编辑选项(default、editable)
    • 5. 错误消息与帮助文本(error_messages、help_text)
    • 6. 唯一性选项(primary_key、unique、unique_for_date、unique_for_month、unique_for_year)
    • 7. 其他选项(verbose_name、validators、自定义验证器)

1、null 和 blank

示例

class NullOrBlank(models.Model):
    null_demo = models.CharField(null=True, max_length=200)
    blank_demo = models.CharField(blank=True, max_length=200)
    null_or_blank_demo = models.CharField(null=True, blank=True, max_length=200)

说明

  • null:默认为 False;设为 True 时,表示字段在数据库中可以存储 NULL 值。
  • blank:默认为 False;设为 True 时,表示在 Django 表单(如 Admin 后台)中可以留空。

blank=True 时,存入数据库的值依赖于 null 的设置:

  • null=True 时,留空会存入 NULL
  • null=False 或默认时,留空会存入空字符串 ''

nullblank 结合使用的几种情况总结:

null=Falsenull=True
blank=False数据库中不可为 NULL
表单中必填
数据库中可为 NULL
表单中必填
blank=True数据库中不可为 NULL
表单中可不填;
⭐ 留空时存入 ''
数据库中可为 NULL
表单中可不填;
⭐ 留空时存入 NULL

通过合理使用 nullblank 的组合,可以根据需求控制数据库和表单的行为。

2、choices

choices 是一个映射或可迭代对象,用作模型字段的选项。

提供 choices 后,字段的默认表单小部件会变为选择框,并且选项会被模型验证强制执行。

choices 在 Django 中有以下几种形式:

(1) 简单的列表或元组形式

这是最常见的形式,choices 定义为一个包含 (值, 可读名称) 的列表或元组。适用于定义一组固定的选项。

# 1、列表形式 (定义在模型类之外)
YEAR_IN_SCHOOL_CHOICES = [
    ("FR", "Freshman"),
    ("SO", "Sophomore"),
    ("JR", "Junior"),
    ("SR", "Senior"),
    ("GR", "Graduate"),
]
# 2、元组形式 (定义在模型类之外)
# YEAR_IN_SCHOOL_CHOICES = (
#    ("FR", "Freshman"),
#    ("SO", "Sophomore"),
#    ("JR", "Junior"),
#    ("SR", "Senior"),
#    ("GR", "Graduate"),
#)
class Student(models.Model):
   # 3、列表/元组形式(定义在模型类内部,即将选项列表定义为类常量)
   # YEAR_IN_SCHOOL_CHOICES = [
   #     ("FR", "Freshman"),
   #     ("SO", "Sophomore"),
   #     ("JR", "Junior"),
   #     ("SR", "Senior"),
   #     ("GR", "Graduate"),
   # ]
    year_in_school = models.CharField(
        max_length=2,
        choices=YEAR_IN_SCHOOL_CHOICES,
        default="FR",
    )
(2) 字典映射形式

在 Django 5.0 中,choices 支持使用字典定义,每个键表示实际存储的值,值为可读名称。适合需要清晰键值对的场景。

# 1、定义在模型类之外
YEAR_IN_SCHOOL_CHOICES = {
    "FR": "Freshman",
    "SO": "Sophomore",
    "JR": "Junior",
    "SR": "Senior",
    "GR": "Graduate",
}
class Student(models.Model):
   # 2、定义在模型类内部
   # YEAR_IN_SCHOOL_CHOICES = {
   #     "FR": "Freshman",
   #     "SO": "Sophomore",
   #     "JR": "Junior",
   #     "SR": "Senior",
   #     "GR": "Graduate",
   # }
    year_in_school = models.CharField(
        max_length=2,
        choices=YEAR_IN_SCHOOL_CHOICES,
        default="FR",
    )

(3) 分组形式

通过嵌套元组或字典分组的方式,将选项分为不同类别,适用于多级选择的场景。

# 1、使用嵌套元组 (定义在模型类之外)
MEDIA_CHOICES = [
    ("Audio", [("vinyl", "Vinyl"), ("cd", "CD")]),
    ("Video", [("vhs", "VHS Tape"), ("dvd", "DVD")]),
    ("unknown", "Unknown"),
]

# 2、使用字典 (定义在模型类之外)
# MEDIA_CHOICES = {
#    "Audio": {"vinyl": "Vinyl", "cd": "CD"},
#    "Video": {"vhs": "VHS Tape", "dvd": "DVD"},
#    "unknown": "Unknown",
#}
class Media(models.Model):
   # 3、使用嵌套元组 (定义在模型类内部)
   # MEDIA_CHOICES = [
   #     ("Audio", [("vinyl", "Vinyl"), ("cd", "CD")]),
   #     ("Video", [("vhs", "VHS Tape"), ("dvd", "DVD")]),
   #     ("unknown", "Unknown"),
   # ]

    media_type = models.CharField(
        max_length=10,
        choices=MEDIA_CHOICES,
        default="unknown",
    )
(4) 可调用对象

choices 定义为一个无参可调用对象(如函数),函数返回一个合法的 choices 结构(例如列表或字典)。适合动态生成选项的场景。

def get_currencies():
    return {i: i for i in ["USD", "EUR", "JPY"]}

class Expense(models.Model):
    currency = models.CharField(max_length=3, choices=get_currencies)
(5)枚举类型

使用 Django 的 TextChoicesIntegerChoices 等枚举类来定义 choices,适合需要常量化、易读性高的选择项。Django 自动生成 .choices.labels.values 等属性,便于管理。

class Student(models.Model):
    class YearInSchool(models.TextChoices):
        FRESHMAN = "FR", "Freshman"
        SOPHOMORE = "SO", "Sophomore"
        JUNIOR = "JR", "Junior"
        SENIOR = "SR", "Senior"
        GRADUATE = "GR", "Graduate"
    
    year_in_school = models.CharField(max_length=2, choices=YearInSchool.choices)
(6) 自定义数据类型的枚举

Choices 类的基础上扩展,可以将 choices 与特定数据类型(如 datedatetime)结合,适合需要特定类型支持的场景,如日期 date

import datetime

class MoonLandings(datetime.date, models.Choices):
    APOLLO_11 = 1969, 7, 20, "Apollo 11 (Eagle)"
    APOLLO_12 = 1969, 11, 19, "Apollo 12 (Intrepid)"

这里仅介绍了处理 date类型的choices,关于其他自定义数据类型的枚举,请看本专栏文章【 关于Django 模型字段 choices自定义数据类型的枚举——补充】


综上,Django 中的 choices 形式主要有以上 6 种。

3. 基本 数据库 相关选项 (db_column、db_comment、db_default、db_index、db_tablespace)

  • db_column:指定字段在数据库中的列名,默认使用字段名。
  • db_comment:为数据库列添加注释,方便有数据库访问权限但无 Django 代码访问权限的用户了解字段含义。

db_column 、db_comment 举例:

from django.db import models
from django.utils import timezone
from django.db.models import F
from django.db.models.functions import Now, TruncMonth
from datetime import timedelta

class Article(models.Model):
    title = models.CharField(
        max_length=200, 
        db_column="article_title",   # 自定义数据库列名,如果不指定 db_column,列名将默认使用字段名,也就是 title。
        db_comment="文章标题",  # 数据库列注释
    )
  • db_default(Django 5.0 新增):在数据库层面设置字段的默认值,可以是常量或数据库函数。注意,不能引用其他字段或模型。

    from django.db import models
    from django.utils import timezone
    from django.db.models import F
    from django.db.models.functions import Now, TruncMonth
    from datetime import timedelta
    
    class Article(models.Model):    
        # 设置数据库默认值:使用数据库函数
        created_at = models.DateTimeField(
            db_default=Now(),   # 使用数据库层面的 Now 函数作为默认值
        )
        # 设置数据库默认值:使用复杂的数据库表达式-->设置为"当前日期" 90 天后的月份的第一天
        due_date = models.DateField(
            db_default=TruncMonth(Now() + timedelta(days=90), output_field=models.DateField())
        )
    
  • db_index:设置为 True 时,创建数据库索引。建议使用 Meta.indexes 替代。

  • db_tablespace:用于指定字段索引存放的数据库表空间。简单来说,它可以将字段的索引存储在特定的物理位置,从而实现更高效的数据库管理和性能优化。此选项仅在支持表空间的数据库(如 PostgreSQL、Oracle)中有效。

db_index 、db_tablespace 举例:

from django.db import models
from django.utils import timezone
from django.db.models import F
from django.db.models.functions import Now, TruncMonth
from datetime import timedelta

class Article(models.Model):   
	# 设置字段的索引,且使用表空间
    pub_date = models.DateTimeField(
        db_index=True,  # 为字段创建数据库索引
        db_tablespace="custom_tablespace"  # 使用自定义表空间
    )

4. 默认值与编辑选项(default、editable)

  • default:设置字段的默认值,可以是固定值或动态生成的值。对于不可变对象,直接使用;对于可变对象,必须使用函数。

    from django.db import models
    from django.utils import timezone
    
    class ExampleModel(models.Model):
        # 1. 固定值:使用固定值作为默认值
        status = models.CharField(
            max_length=20,
            default="Draft"  # 设置固定字符串作为默认值
        )
    
        # 2. 函数/可调用对象:使用函数或或可调用对象生成动态默认值(例如当前时间)
        created_at = models.DateTimeField(
            default=timezone.now  # 使用当前时间作为默认值
        )
    
        # 3. 不可变和可变对象:对不可变对象可以直接使用;
        #    对于可变对象(如列表或字典),必须使用函数包装来避免所有实例共享同一对象。
        settings = models.JSONField(
            default=lambda: {"theme": "light", "notifications": True}  # 使用函数生成默认值
        )
    
    
  • editable:决定字段是否在表单和管理后台中显示。对于只读或自动生成的字段,通常设为 False

    class Article(models.Model):
        # 1. 默认(editable=True):该字段会出现在管理后台和表单中,可以编辑。
        title = models.CharField(
            max_length=200,
            default="Untitled Article",  # 默认值,可编辑
            editable=True  # 可以编辑
        )
    
        # 2. 设为不可编辑,该字段不会出现在管理后台或 ModelForm 表单中,也不会进行表单验证,通常用于只读或自动生成的字段。
        description = models.TextField(
            default="No description provided.",  # 默认值,不可编辑
            editable=False  # 不会出现在表单中
        )
    

5. 错误消息与帮助文本(error_messages、help_text)

  • error_messages:指定字段验证时的错误信息,接受 nullblankinvalidunique 等键值字典,覆盖默认错误消息。

    from django.db import models
    
    class UserProfile(models.Model):
        # 用户名字段自定义错误消息
        username = models.CharField(
            max_length=50,
            unique=True,  # 设置唯一性约束
            """
        		blank:当表单提交时,若 username 为空,返回“用户名不能为空,请输入您的用户名。”。
    			unique:若 username 值重复,返回“此用户名已被使用,请选择其他用户名。”。
    			null:当数据库层面该字段值为 NULL 时,返回“用户名不能为空值。”。
    			invalid:若 username 格式不符合要求(例如设置了其他验证器),返回“用户名格式不正确,请检查输入。”。
        	"""
            error_messages={
                'blank': "用户名不能为空,请输入您的用户名。",
                'unique': "此用户名已被使用,请选择其他用户名。",
                'null': "用户名不能为空值。",
                'invalid': "用户名格式不正确,请检查输入。"
            }
        )
        # 邮箱字段自定义错误消息
        email = models.EmailField(
            """
            若邮箱为空,提示“邮箱不能为空,请输入您的邮箱地址。”。
    		若邮箱格式不符合要求,提示“邮箱格式不正确,请输入有效的邮箱地址。”。
            """
            error_messages={
                'blank': "邮箱不能为空,请输入您的邮箱地址。",
                'invalid': "邮箱格式不正确,请输入有效的邮箱地址。"
            }
        )
    
    
  • help_text:提供额外的帮助文本,通常用于表单中。可以使用 HTML,但需注意转义。

    from django.db import models
    
    class Product(models.Model):
        name = models.CharField(
            max_length=100,
            help_text="请输入产品名称,不超过100个字符。"
        )
    

    在这里插入图片描述


6. 唯一性选项(primary_key、unique、unique_for_date、unique_for_month、unique_for_year)

  • primary_key:若为 True,则该字段作为模型的主键。主键字段默认为 null=Falseunique=True。Django 默认会创建一个主键字段,除非手动指定。

  • unique:若为 True,则字段值必须在整个表中唯一。数据库和模型验证都会强制执行。

  • unique_for_dateunique_for_monthunique_for_year:限定字段值在指定日期、月份或年份内唯一。适用于日期和时间字段,依赖 Model.validate_unique() 验证。

    举例:假设我们有一个新闻文章模型 Article,其中每篇文章的标题在同一发布日期内必须唯一。通过 unique_for_dateunique_for_monthunique_for_year 来实现这一需求。

    from django.db import models
    
    class Article(models.Model):
        title = models.CharField(max_length=200)
        pub_date = models.DateField()  # 发布日期字段
    
        # 设置 title 在特定时间段内唯一
        unique_for_day_title = models.CharField(
            max_length=200,
            unique_for_date="pub_date",  # 在同一天内,title 必须唯一
        )
        unique_for_month_title = models.CharField(
            max_length=200,
            unique_for_month="pub_date",  # 在同一个月内,title 必须唯一
        )
        unique_for_year_title = models.CharField(
            max_length=200,
            unique_for_year="pub_date",  # 在同一年内,title 必须唯一
        )
    

    注意

    • 非数据库层面:这些约束仅在 Django 的模型层面生效,在数据库层面不会强制执行。

    • 需要日期字段支持:这些约束依赖于 DateFieldDateTimeField 类型的日期字段,必须在同一个模型中定义。

    • 仅在 ORM 中生效:这些唯一性约束只在 Django ORM 中保存数据时有效,直接在数据库中插入数据时不会验证。

    • 不适用于被表单排除的字段:如果日期字段在表单中被排除或不可编辑,Django 无法验证该唯一性约束。常见的“排除”方式有以下几种:

      • ①在表单的 exclude 选项中指定字段

        from django import forms
        from .models import Article
        
        class ArticleForm(forms.ModelForm):
            class Meta:
                model = Article
                fields = ['title', 'content']  # 只包含 'title' 和 'content'
                exclude = ['pub_date']  # 排除 'pub_date' 字段
        
      • ② 在 fields 中仅指定需要的字段

        class ArticleForm(forms.ModelForm):
            class Meta:
                model = Article
                fields = ['title', 'content']  # 仅包括 'title' 和 'content' 字段
        
        
      • ③ 将字段设为不可编辑(editable=False

        from django.db import models
        
        class Article(models.Model):
            title = models.CharField(max_length=200)
            content = models.TextField()
            pub_date = models.DateField(editable=False)  # 设置为不可编辑
        
        

7. 其他选项(verbose_name、validators、自定义验证器)

  • verbose_name:字段的可读名称,若不设置,Django 会自动使用字段名(将下划线转换为空格)。例如,first_name 字段默认会显示为 “First name”。

    from django.db import models
    
    class Product(models.Model):
        # 设置了 verbose_name
        name = models.CharField(
            max_length=100,
            verbose_name="产品名称"  # 字段显示为“产品名称”
        )
        
        # 未设置 verbose_name,Django 使用字段名,自动替换下划线为空格
        product_code = models.CharField(max_length=20)  # 显示为“Product code”
        
        # 使用 gettext_lazy 进行国际化
        description = models.TextField(
            verbose_name=_("Product Description")  # 支持多语言的字段名
        )
    

在这里插入图片描述

:关于 gettext_lazy 国际化,欢迎查看【Django 启用国际化支持—实现配置多国语言-CSDN博客】

  • validators:字段的验证器列表,可包含自定义的验证函数或预定义的验证器。

    Django 提供了一些常用的内置验证器,常见的有:

    • MaxValueValidator:检查值是否不超过指定的最大值。
    • MinValueValidator:检查值是否不低于指定的最小值。
    • MaxLengthValidator:检查文本字段的最大长度。
    • MinLengthValidator:检查文本字段的最小长度。
    • EmailValidator:检查字段是否是有效的电子邮件地址。
    • URLValidator:检查字段是否是有效的 URL 地址。
    • RegexValidator:使用正则表达式检查字段格式。

    示例代码:

    from django.db import models
    from django.core.validators import MaxValueValidator, MinValueValidator, EmailValidator, RegexValidator
    
    class UserProfile(models.Model):
        # 年龄字段,要求在 0 到 120 之间
        age = models.IntegerField(
            validators=[MinValueValidator(0), MaxValueValidator(120)]
        )
        
        # 邮箱字段,验证邮箱格式
        email = models.EmailField(
            validators=[EmailValidator(message="请输入有效的邮箱地址")]
        )
        
        # 手机号字段,使用正则表达式验证手机号格式
        phone_number = models.CharField(
            max_length=15,
            validators=[RegexValidator(regex=r'^\+?1?\d{9,15}$', message="请输入有效的手机号")]
        )
    
    

    在这里插入图片描述

    自定义验证器示例

    自定义验证器是一个函数或可调用对象,它接收一个值作为参数并验证该值。如果验证失败,需要抛出 ValidationError 异常。自定义验证器可以实现更加灵活、复杂的规则。

    示例代码:

    from django.core.exceptions import ValidationError
    from django.core.validators import MinLengthValidator, MaxLengthValidator
    import re
    
    # 自定义验证器函数
    """
    假设我们想确保用户名不能包含特殊字符,且长度限制在 5 到 30 个字符之间,可以编写一个自定义验证器:
    """
    def validate_username(value):
        if not re.match(r'^[a-zA-Z0-9_]+$', value):
            raise ValidationError("用户名只能包含字母、数字和下划线")
    
    class User(models.Model):
        username = models.CharField(
            max_length=30,
            validators=[
                validate_username, # 应用自定义验证器
                MinLengthValidator(5),
                MaxLengthValidator(30)
            ]  
        )
    
    

    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2239638.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序:vant组件库安装步骤

前言:在微信小程序中引用vant组件报错,提示路径不存在,这很有可能是因为没有安装构建vant组件库导致。下面是我整理的安装vant组件库的步骤: 第一步:安装node.js(执行完第一步请重启小程序) 具体步骤请看链接:node.js…

Python如何根据给定模型计算权值

目录 一、特征权重的重要性 二、线性回归中的特征权重计算 1. 导入必要的库 2. 创建示例数据集 3. 分割数据集 4. 训练线性回归模型并计算权重 三、特征选择方法 四、实际案例:金融科技数据集 五、总结 在机器学习中,特征权重的计算是理解模型如…

过去几年电子学习的趋势

近年来,在技术和不断变化的学习者期望的推动下,电子学习已经发展成为一种适应性强、沉浸式和社会化的教育形式。个性化已成为最具影响力的趋势之一,Coursera和LinkedIn Learning等平台为个人量身定制内容。这些平台使用人工智能来建议课程、跟…

面相小白的php反序列化漏洞原理剖析

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理反序列化漏洞的一些成因原理 建议学习反序列化之前 先对php基础语法与面向对象有个大体的了解 (我觉得我整理的比较细致,了解这俩是个啥就行) 漏洞实战情况 这个漏洞黑盒几乎不会被发现&am…

Flutter中的Material Theme完全指南:从入门到实战

Flutter作为一款热门的跨平台开发框架,其UI组件库Material Design深受开发者喜爱。本文将深入探讨Flutter Material Theme的使用,包括如何借助Material Theme Builder创建符合产品需求的主题风格。通过多个场景和代码实例,让你轻松掌握这一工…

IDC机房服务器托管的费用组成

IDC机房服务器托管的费用,并不是只有我们所想的电费而已,还有一些其它费用组成,详细来看: 1. 机位费用:   - 机位费用是根据服务器的尺寸和占用的空间来计算的。服务器通常按照U(Unit)的高度来…

032集——圆转多段线(Circle to Polyline)(CAD—C#二次开发入门)

CAD中圆可转为带有凸度的多段线以方便后期数据计算、处理&#xff0c;效果如下&#xff1a; 白色为圆&#xff0c;红色为转换后的多段线&#xff08;为区分&#xff0c;已手工偏移多段线&#xff09; public static void XX(){var curves Z.db.SelectEntities<Entity>…

Nginx更换ssl证书不生效

一.场景 在用的ssl证书要过期了&#xff0c;申请了新的ssl证书下来&#xff0c;在nginx配置上更换上去后&#xff0c;打开系统地址&#xff0c;一依然是使用原来的旧证书&#xff0c;以前有更换过别的域名证书&#xff0c;重启nginx服务后立马就生效了。 这次没生效&#xff…

华为eNSP:MSTP

一、什么是MSTP&#xff1f; 1、MSTP是IEEE 802.1S中定义的生成树协议&#xff0c;MSTP兼容STP和RSTP&#xff0c;既可以快速收敛&#xff0c;也提供了数据转发的多个冗余路径&#xff0c;在数据转发过程中实现VLAN数据的负载均衡。 2、MSTP可以将一个或多个VLAN映射到一个Inst…

Jmeter中的配置原件(二)

5--HTTP请求默认值 用途 设置默认值&#xff1a;为多个HTTP请求设置通用的默认值&#xff0c;如服务器地址、端口号、协议等。简化配置&#xff1a;避免在每个HTTP请求中重复配置相同的参数。 配置步骤 添加HTTP请求管理器 右键点击线程组&#xff08;Thread Group&#xff…

SpringBoot(二十一)SpringBoot自定义CURL请求类

在测试SpringAi的时候,发现springAI比较人性化的地方,他为开发者提供了多种请求方式,如下图所示: 上边的三种方式里边,我还是喜欢CURL,巧了,我还没在Springboot框架中使用过CURL呢。正好封装一个CURL工具类。 我这里使用httpclient来实现CURL请求。 一:添加依赖 不需要…

空空想色?李子柒 想念你们!——早读(逆天打工人爬取热门微信文章解读)

空空想色 引言Python 代码第一篇 李子柒 想念你们&#xff01;第二篇 什么叫个性命双休结尾 引言 又开始新的尝试 最近看了坛经 所以现在佛性满满 看到很多sese的图 现在基本不会有什么想法了 以前看不懂呀 现在是借着王德峰的讲解勉强看懂 后面也会越来越懂 总之就是 空空 …

高频旁路电容选型注意事项

1. 前置频率倍减器 图1是用于1.9GHz频带的PLL信号发生器使用的前置频率倍减器的电路图。在这种高频率中&#xff0c;普通PLL用可编程序计数器不工作&#xff0c;而是把ECL等前置频率倍减器连接在前段后分频。 这种例子的分频比为1/256。例如&#xff1a;1.920GHz的输入信号分…

Android Studio | 修改镜像地址为阿里云镜像地址,启动App

在项目文件的目录下的 settings.gradle.kts 中修改配置&#xff0c;配置中包含插件和依赖项 pluginManagement {repositories {maven { urluri ("https://www.jitpack.io")}maven { urluri ("https://maven.aliyun.com/repository/releases")}maven { urlu…

PDF24:多功能 PDF 工具使用指南

PDF24&#xff1a;多功能 PDF 工具使用指南 在日常工作和学习中&#xff0c;PDF 是一种常见且重要的文档格式。无论是查看、编辑、合并&#xff0c;还是转换 PDF 文件&#xff0c;能够快速高效地处理 PDF 文档对于提高工作效率至关重要。PDF24 是一款免费、功能全面的 PDF 工具…

opencv实时弯道检测

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

怎么禁止文件外发?企业如何禁止文件外发,教你6种方法,综合运用效果加倍

在当今数字化的商业环境中&#xff0c;企业内部文件承载着大量关键信息&#xff0c;犹如企业的命脉。这些文件可能包含着核心技术机密、客户资料、未公开的战略规划以及敏感的财务数据等&#xff0c;它们是企业在激烈市场竞争中立足的重要资产。然而&#xff0c;随着信息传播途…

SCI论文数据可视化的在线网址

目录 SCI论文数据可视化的在线网址 EVenn(Evenn):免费 SCI论文数据可视化的在线网址 数据可视化的在线网址,以下是一些值得推荐的资源: ImageGP(ImageGP | ImageGP):该平台可以在线生成常见的线图、柱状图、散点图、箱线图、集合图、热图和直方图等。用户只需粘贴数…

外星人入侵

学习于Python编程从入门到实践&#xff08;Eric Matthes 著&#xff09; 整体目录&#xff1a;外星人入侵文件夹是打包后的不必在意 图片和音效都是网上下载的 音效下载网站&#xff1a;Free 游戏爆击中 Sound Effects Download - Pixabay 运行效果&#xff1a;可以上下左右移…

DB-GPT系列(六):数据Agent开发part1-光速创建AWEL Agent应用

前面的系列文章介绍了&#xff1a; DB-GPT的总体功能 DB-GPT部署&#xff08;镜像一键部署、源码部署&#xff09; DB-GPT底层模型设置&#xff08;开源模型、在线模型&#xff09; DB-GPT的基础对话、知识库对话、excel对话 DB-GPT的数据库对话、数据对话、仪表盘对话 通…