【Django】Task2 了解models和使用admin后台

文章目录

  • 【Django】Task2 了解models和使用admin后台
    • 1.什么是models
      • 1.1常用字段类型说明
      • 1.2常用配置参数
      • 1.3models示例
    • 2.使用Django的admin管理模块
      • 2.1admin管理模块介绍
      • 2.2创建管理员用户
      • 2.3定义models实体对象
      • 2.4注册对象
      • 2.5合并数据库
      • 2.6启动项目并进入管理后台
    • 3.springboot和Django的区别

【Django】Task2 了解models和使用admin后台

Task2主要了解Django中的models模块和admin后台的使用
在这里插入图片描述

1.什么是models

在 Django 中,models 是必不可少的组成部分之一。models 是 Django ORM(对象关系映射)的核心部分,它允许您在 Python 代码中定义数据模型,这些模型将映射到数据库表格。通过定义数据模型,您可以轻松地在代码中创建、查询和管理数据库表格,而无需编写原始的 SQL 查询语句。

以下是一些关键原因,说明为什么 Django 中的 models 是必须的:

数据持久化: 在许多 Web 应用程序中,需要将数据持久化到数据库中以进行长期存储。models 允许您在 Python 代码中定义数据模型,然后通过迁移操作将这些模型映射到数据库表格。数据库交互: 通过使用 models,您可以使用 Python 代码而不是直接的 SQL 查询来操作数据库。这样可以让开发更加方便、可读性更高,并且避免了编写大量的重复代码。数据库结构管理: Django 的迁移系统允许您对数据库结构进行版本控制和管理。当您更改 models 定义时,可以通过运行迁移来同步数据库结构,而不必手动更改数据库表格。高级特性: models 不仅仅是将数据模型映射到表格,还可以定义字段、关系、验证规则等。您可以定义数据模型之间的关联关系,如一对多、多对多等。这些高级特性可以帮助您更好地建模和组织数据。管理后台: Django 自带一个强大的管理后台,它可以自动生成用于管理数据库内容的界面。models 的定义直接影响着管理后台的表现。

总之,models 是 Django 中非常重要的组成部分,它使您能够在 Python 代码中定义数据模型,并将其映射到数据库表格,从而实现数据持久化和数据库交互。

1.1常用字段类型说明

  ​CharField​:用于存储字符串类型,有最大长度限制​IntegerField​:用于存储整数类型​FloatField​:用于存储浮点数类型​BooleanField​:用于存储布尔类型​DateField​:用于存储日期类型​DateTimeField​:用于存储日期和时间类型​ImageField​:用于存储图片类型​FileField​:用于存储文件类型​ForeignKey​:外键 用于表示数据库表之间的关联关系​OneToOneField​:一对一 用于表示一对一的关联关系​ManyToManyField​:多对多 用于表示多对多的关联关系

1.2常用配置参数

​max_length​:字段的最大长度限制,可以应用于多种不同的字段类型。​verbose_name​:字段的友好名称,便于在管理员后台可视化操作时使用。​default​:指定字段的默认值。​null​:指定字段是否可以为空。null=True​ 设置允许该字段为 NULL 值​blank​:指定在表单中输入时是否可以为空白。​choices​:用于指定字段的可选值枚举列表。

1.3models示例

在最上面定义

class DeliveryMaterial(Model):"""复核产品"""class Status(TextChoices):"""状态"""QUALIFIED = ('qualified', '良品')UNQUALIFIED = ('unqualified', '不良品')status = CharField(max_length=32, choices=Status.choices, default=Status.QUALIFIED, verbose_name='状态')

其中:
​TextChoices​ 是 Django 3.0 引入的一个枚举类,用于在模型字段中创建可选择的、文本值的选项。

​related_name​:指定在多对多等关系中反向使用的名称。

​on_delete​:指定如果外键关联的对象被删除时应该采取什么操作。

2.使用Django的admin管理模块

2.1admin管理模块介绍

Django 的 admin 模块是一个内置的管理后台,它提供了一个功能强大的界面,用于管理和操作数据库中的数据。通过 admin 模块,您可以轻松地进行数据的创建、读取、更新和删除操作,而无需编写自定义的管理界面。以下是关于 Django 的 admin 模块的详细解释:

注册模型: 要在 admin 后台管理某个模型(数据库表格),您需要将该模型注册到 admin 中。在模型的相关 Python 文件中,使用 admin.site.register(ModelName) 来注册该模型。自动生成管理界面: 一旦模型被注册,admin 模块会自动为该模型生成一个管理界面。这个界面允许您在浏览器中查看、添加、编辑和删除数据库中的记录。自定义显示字段: 您可以在模型的注册中定义 list_display 属性,指定在列表视图中显示哪些字段。这允许您自定义在记录列表中显示的信息。搜索和过滤: admin 提供了搜索框和过滤器,让您能够根据特定条件查找和筛选记录。编辑和详情视图: 对于每个记录,admin 生成一个详情视图,允许您查看完整的记录信息。您还可以在编辑视图中修改记录的内容。内联编辑: 如果模型之间存在关联关系,例如一对多关系,admin 允许您在同一页面内编辑关联的记录。这被称为内联编辑。自定义表单: 您可以自定义在添加和编辑视图中显示的字段。这允许您根据需要隐藏某些字段或添加额外的字段。权限控制: admin 具有细粒度的权限控制,您可以根据用户角色(超级用户、普通用户等)限制其访问和操作的内容。自定义动作: 您可以在 admin 模块中定义自定义操作,称为动作。这些动作可以在多个记录上执行,例如将选定的记录标记为已完成。主题定制: admin 允许您进行界面的定制,您可以调整颜色、字体等,以使界面与您的应用程序的样式相匹配。多语言支持: admin 模块支持多语言,允许您为不同的语言提供翻译和本地化。可扩展性: 尽管 admin 提供了大量内置的功能,您还可以通过自定义 admin 类来进一步扩展和定制。

总之,Django 的 admin 模块是一个强大的工具,使开发人员能够快速搭建功能完备的管理后台,轻松地管理和操作数据库中的数据。通过这个模块,您可以在不编写额外代码的情况下,提供一个友好的用户界面,用于管理您的应用程序的数据。

在此贴上一些Django的常用操作博客:
Django基础与高阶使用https://blog.csdn.net/qq_39187019/category_10287078.html

2.2创建管理员用户

创建后台 admin 管理员(创建超级管理员)

 ​python manage.py createsuperuser 

在这里插入图片描述

2.3定义models实体对象

在models.py中定义产品分类和产品两个对象

from django.db import models# Create your models here.
from django.db.models import *# Create your models here.
## 产品分类表
class GoodsCategory(Model):"""产品分类"""name = CharField(max_length=64, verbose_name='分类名称')remark = CharField(max_length=64, null=True, verbose_name='备注', blank=True)## 产品表
class Goods(Model):"""产品"""# 外键category = ForeignKey(GoodsCategory, on_delete=SET_NULL, related_name='goods_set', null=True,verbose_name='产品分类', blank=True, )# on_deletenumber = CharField(max_length=32, verbose_name='产品编号')name = CharField(max_length=64, verbose_name='产品名称')barcode = CharField(max_length=32, null=True, blank=True, verbose_name='条码')spec = CharField(max_length=64, null=True, blank=True, verbose_name='规格')shelf_life_days = IntegerField(null=True, verbose_name='保质期天数')purchase_price = FloatField(default=0, verbose_name='采购价')retail_price = FloatField(default=0, verbose_name='零售价')remark = CharField(max_length=128, null=True, blank=True, verbose_name='备注')

2.4注册对象

在admin.py中注册对象

# Register your models here.
from django.contrib import admin
from .models import * # 引入产品表# 一定要分开逐个注册,不能放在一起admin.site.register(Goods) # 在admin站点中 注册产品表
admin.site.re

2.5合并数据库

当你修改了Django模型后,你需要运行这两个命令,以将这些更改应用到数据库中
如果修改了models不执行合并数据库命令,会出现找不到表的报错
在这里插入图片描述

这两个命令是Django框架中的关键命令,用于进行数据库迁移。。

python manage.py makemigrations​: 这个命令用于生成迁移脚本。当你更新了模型文件之后,需要运行该命令,Django会检测模型的改变,然后自动生成相应的迁移脚本,存储在migrations/​目录下。通常来说,你需要针对每个应用运行一次该命令。

​python manage.py migrate​: 这个命令用于将迁移脚本应用到数据库中。当你在模型文件中进行更改之后,需要先通过makemigrations​命令生成迁移脚本,然后运行该命令将这些脚本应用到数据库中。对于新的迁移脚本,Django会逐个执行它们,从而更新数据库结构。对于已经执行过的脚本,Django会跳过它们,避免重复执行。
这两个命令是Django框架中非常重要的命令,在修改数据库相关内容时必须时刻清醒地记住使用它们。

执行完上述命令后可以看到数据库新增了models中定义的两张表
在这里插入图片描述

2.6启动项目并进入管理后台

启动项目命令

python manage.py runserver

登录 admin 后台(浏览器中输入)

http://127.0.0.1:8000/admin
在这里插入图片描述

3.springboot和Django的区别

Spring Boot 和 Django 都是流行的 Web 开发框架,但它们是在不同的编程语言(Java 和 Python)中开发的,因此在某些方面存在一些区别。以下是 Spring Boot 项目和 Django 项目之间的一些比较,以及 Django 的一些主要优点:

比较

编程语言:Spring Boot:使用 Java 编程语言。
Django:使用 Python 编程语言。
生态系统:Spring Boot:属于 Spring 生态系统,提供了广泛的功能和模块,适用于企业级应用开发。
Django:提供了全面的框架,适用于中小规模的 Web 应用和快速开发。
语法和哲学:Spring Boot:Java 通常需要更多的代码量和样板代码,但在大型企业应用中更受欢迎。
Django:Python 的语法更加简洁,减少了样板代码,适合快速开发和小型项目。
数据库:Spring Boot:提供了 JPA(Java Persistence API)等多种数据库访问方式。
Django:具有内置的 ORM(对象关系映射)系统,使数据库访问更加简单。

Django 的主要优点

快速开发: Django 的设计目标之一是快速开发。它提供了许多内置功能,如认证、管理员界面、表单处理等,减少了开发人员需要从头开始编写的代码量,从而加快了项目的开发速度。强大的 ORM: Django 的 ORM 简化了与数据库的交互,允许您使用 Python 代码来定义数据模型和数据库表格。它支持多种数据库后端,并提供了丰富的查询和数据操作功能。丰富的内置功能: Django 包括用户认证、管理后台、国际化支持、安全性等许多内置功能,这些功能在许多 Web 应用中是常见的需求,使开发更加高效。社区支持和文档: Django 拥有活跃的社区,提供了丰富的文档和教程,帮助开发人员学习和使用框架。这使得学习和解决问题变得更加容易。灵活性: 尽管 Django 提供了许多默认的约定,但它也允许开发人员根据项目的需求进行定制,从而在大多数情况下实现了“Django 的方式”,同时仍然保持了灵活性。

总之,Django 是一个功能强大且易于使用的 Web 开发框架,特别适用于快速开发中小型 Web 应用程序。其内置功能、ORM、快速开发哲学和优雅的 Python 语法都是 Django 的主要优点之一。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot 实践(10)spring cloud 与consul配置运用之服务的注册与发现

前文讲解,完成了springboot、spring security、Oauth2.0的继承,实现了对系统资源的安全授权、允许获得授权的用户访问,也就是实现了单一系统的全部技术开发内容。 Springboot是微服务框架,单一系统只能完成指定系统的功能&#xf…

微信程序 自定义遮罩层遮不住底部tabbar解决

一、先上效果 二 方法 1、自定义底部tabbar 实现: https://developers.weixin.qq.com/miniprogram/dev/framework/ability/custom-tabbar.html 官网去抄 简单写下:在代码根目录下添加入口文件 除了js 文件的list 需要调整 其他原封不动 代码&#xf…

2009年下半年 软件设计师 上午试卷3

博主介绍:✌全网粉丝3W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

React实战 - React路由鉴权

目录 一、React-Router知识回顾 二、路由鉴权应用分析 三、路由鉴权配置 四、权限控制 一、React-Router知识回顾 React-router相关的文章中我已经给大家演示了最基础的应用&#xff1a; <Switch ><Route path"/products/:id" component{ProductDetai…

模型(Model)/视图(View)结构之目录浏览器

目录浏览器 QDirModel 是 Qt 中用于展示文件系统目录结构的模型类。它继承自 QAbstractItemModel&#xff0c;用于提供数据和操作接口&#xff0c;以便在视图组件&#xff08;如 QTreeView、QListView&#xff09;中显示文件系统的目录结构。 QDirModel 提供了以下功能和特性…

CSRF

CSRF CSRF&#xff0c;跨站域请求伪造&#xff0c;通常攻击者会伪造一个场景&#xff08;例如一条链接&#xff09;&#xff0c;来诱使用户点击&#xff0c;用户一旦点击&#xff0c;黑客的攻击目的也就达到了&#xff0c;他可以盗用你的身份&#xff0c;以你的名义发送恶意请…

微软Win11 Dev预览版Build23526发布

近日&#xff0c;微软Win11 Dev预览版Build23526发布&#xff0c;修复了不少问题。牛比如斯Microsoft&#xff0c;也有这么多bug&#xff0c;所以你写再多bug也不作为奇啊。 主要更新问题 [开始菜单&#xff3d; 修复了在高对比度主题下&#xff0c;打开开始菜单中的“所有应…

远程真机测试为什么需要应用性能指标监控?

我们在使用app、小程序等手机应用的时候&#xff0c;经常会发生“卡死“等现象。”卡死“会让用户认为你的app不可信&#xff0c;从而引发删除等情况。我们辛辛苦苦、花费大量精力和费用推广的app就失败了。 因此&#xff0c;我们就需要知道&#xff0c;app在使用时候&#…

计算机网络-物理层(三)-信道的极限容量

计算机网络-物理层(三)-信道的极限容量 当信号在信道中传输失真不严重时&#xff0c;在信道的输出端&#xff0c;这些信号可以被识别 当信号在信道中&#xff0c;传输失真严重时&#xff0c;在信道的输出端就难以识别 造成失真的因素 码元传输速率信号传输距离噪声干扰传输媒…

测试框架pytest教程(4)运行测试

运行测试文件 $ pytest -q test_example.py 会运行该文件内test_开头的测试方法 该-q/--quiet标志使输出保持简短 测试类 pytest的测试用例可以不写在类中&#xff0c;但如果写在类中&#xff0c;类名需要是Test开头&#xff0c;非Test开头的类下的test_方法不会被搜集为用…

K8s实战4-使用Helm在Azure上部署Ingress-Nginx和Tokengateway

手动发布Ingress-Nginx 1 登录到aks(dfinder-gw-aks) az login az account set --subscription ${sub ID} az aks get-credentials --resource-group ${groupname} --name ${aks name} 2 下载 ingress-nginx-4.2.5.tgz curl -LO https://github.com/kubernetes/ingress-ngi…

电商项目part04 微服务拆分

微服务架构拆分 微服务介绍 英文:https://martinfowler.com/articles/microservices.html 中文:http://blog.cuicc.com/blog/2015/07/22/microservices 微服务拆分时机 如下场景是否需要进行微服务拆分&#xff1f; 代码维护困难&#xff0c;几百人同时开发一个模块&…