当前位置: 首页 > news >正文

【Django:基础知识】

目录

对象关系映射器 (ORM)

什么叫做对象关系映射器(ORM)?

Django Admin 管理后台:

Django如何生成的界面是正确的?

Django中如何自定义控件?

Django的控件:

如何理解Django中的控件?

Django的控件与QT中的控件有什么不同?


对象关系映射器 (ORM)

什么叫做对象关系映射器(ORM)?

数据库中保存的数据是保存到表中,在python代码中我们更习惯的使用对象来进行操作

于是ORM发挥了作用,ORM 就是一个“翻译官”:

  • 你在代码里操作 对象,ORM 帮你把它翻译成 SQL 语句 去操作数据库。

  • 你从数据库里读到的是“表格数据”,ORM 自动翻译成 Python 的“对象”给你用。

在model.py文件中,Django ORM 会在数据库里建一个 User

from django.db import modelsclass User(models.Model):name = models.CharField(max_length=100)age = models.IntegerField()

在python中查询使用对象的方式查询,不需要写sql

# 新增
user = User(name="alice", age=18)
user.save()
# 查询
users = User.objects.all()
# 筛选
young_users = User.objects.filter(age__lt=17)

ORM会自动生成对应的SQL语句,解放双手

INSERT INTO user (name, age) VALUES ("Alice", 20);
SELECT * FROM user;
SELECT * FROM user WHERE age < 25;

总结:

对象关系映射器 (ORM) 就是 一个把 面向对象的代码关系型数据库的表格 连接起来的工具。

  • 开发者只需要写 Python 对象,不需要自己写 SQL。

  • ORM 自动把对象和表对应起来,简化了数据库操作。

Django Admin 管理后台:

步骤:

  1. 在model.py中定义模型
    from django.db import modelsclass Article(models.Model):title = models.CharField(max_length=200)   # 文章标题content = models.TextField()              # 文章内容created_at = models.DateTimeField(auto_now_add=True)  # 发布时间def __str__(self):return self.title
  2. 在admin.py中将模型注册到管理后台
    from django.contrib import admin
    from .models import Articleadmin.site.register(Article)   # 注册模型
  3. 运行迁移,创建数据库表
    python manage.py makemigrations
    python manage.py migrate
  4. 创建管理员账号
    python manage.py createsuperuser
  5. 启动服务器
python manage.py runserver

总结:

Django 的 Admin 管理后台就是:你只要写好模型(models.py),Django 就能自动生成一个 专业的后台网站。这个后台可以用来 增删改查 数据。Django 的 Admin 管理后台界面几乎不需要自己动手写代码,界面本身的代码 是 Django 框架自带的(在 django.contrib.admin 里)。你只需要定义模型,并告诉 Django 哪些模型需要显示到后台。所以,Django Admin 就是“开箱即用”的后台管理系统,不需要你手写页面。

注意:

1.在 Django 中,你定义的模型(models.py)并不会自动生成前台用户可见的登录界面。

2.但是 Django Admin 后台 会根据模型生成对应的管理界面(增删改查)。

3.登录界面(/admin/login/)是 Django Admin 自带的,并不是因为你定义了模型才出现的。

换句话说:

4.定义 业务模型(比如 BookStudent) → Django Admin 自动生成后台表单、列表页面。

使用 内置的 User 模型 或者自己扩展的用户模型 → Django Admin 自带的登录功能生效。


Django如何生成的界面是正确的?

Django生成界面依赖对象关系映射,自动生成表单、Django Admin的模板系统和验证机制。

        ORM(对象关系映射):每个模型类都会映射到数据库的一张表,Django能知道字段类型,约束条件

        自动生成表单:Django提供了ModelForm,能根据模型的字段自动生成表单控件,例如:CharField->文本框、BooleanField->复选框

        Django Admin的模板系统:Admin界面套用了一套通用模板(HTML+CSS+JS),模板根据模型类型的字段信息动态渲染出"输入框、下拉框"等控件

        验证机制:每个模板字段都带有校验逻辑,例如:EmailField->必须是合法邮箱,所以Admin界面自动生成的表单不仅能展示,还可以自动验证输入是否合法

举个例子:

总结:

  • 模型定义了数据结构和约束
  • Django Admin利用模型和表单系统,自动生成界面
  • 保证“对”的界面靠:模型字段->表单控件->内置校验
Django中如何自定义控件?

方法有很多,举例两个方法:

方法一:在Admin界面自定义控件,通过 ModelAdminformformfield_overrides 来修改控件。

在自定义的 StudentAdmin 里,用 formfield_overrides 指定:所有 models.DateField 都用 forms.DateInput,并加上 attrs={'type':'date'},这样渲染成 <input type="date">,页面会出现日期选择器。写完了管理类还没完结,需要把这个管理类注册进urls.py中才能使用这个管理类

from django.db import models
from django import forms#StudentAdmin(admin.ModelAdmin)定义一个后台管理类
class StudentAdmin(admin.ModelAdmin):# formfield_overridesD提示Django遇到某种模型字段时,使用指定的表单控件formfield_overrides = {models.DateField: {'widget': forms.DateInput(attrs={'type': 'date'})},#forms.DateInput(attrs={'type': 'date'}:所有日期字段都用原生日期选择器。}

方法二:自定义Widget

如果 Django 内置的 TextInputSelectDateInput 等不够用,你可以继承 forms.Widget 来写自己的。举个例子:

  • 自定义了一个表单控件 ColorPickerWidget,它继承自 forms.TextInput,把输入类型设为 HTML5 的 input type="color",也就是浏览器原生的颜色选择器。
  • 在 StudentForm 这个 ModelForm 里,通过 Meta.widgets 指定:某个字段使用你自定义的颜色选择器来渲染。
# 使用方法
from django import forms
from .models import Student
from django import formsclass ColorPickerWidget(forms.TextInput):input_type='color'class StudentForm(forms.ModelForm):class Meta:model=Studentfields=['name','age']widgets={'name':ColorPickerWidget(),}

总结

  • 简单控件修改 → 在 ModelForm 里用 widgets

  • Admin 界面修改 → 在 ModelAdmin 里用 formformfield_overrides

  • 完全自制控件 → 继承 forms.Widget 来写

Django的控件:

如何理解Django中的控件?

Django中的控件本质上是表单中某个输入项对应的HTML片段的生成器和解析器,它生成<input> /<select>之类的标签,并负责把浏览器提交的字符串还原为python值,主要运行在服务器端,简而言之,它的职责就是描述“这个字段用什么HTML输入控件显示,带哪些属性,怎么把提交的文本解析会python”。例如:TextInput,DateInput,Select等。

Django的控件与QT中的控件有什么不同?

结论:

  • Django没有真正的“按钮控件”,因为 Django 不直接画界面,它只是提供 HTML 表单标签。Django本质是某个HTML片段的生成器和解析器,生成<input> /<select>之类的标签,并负责把浏览器提交的字符串还原为python值,运行在 浏览器/HTTP 请求 - 服务器响应 的模式下,控件不是即时的对象,它的事件机制是HTTP 请求/响应,非实时。
  • QT是直接被绘制在窗口上的,响应鼠标键盘事件,运行在你的电脑本地,拥有完整的交互生命周期。它们运行在桌面应用进程中,可以直接接收用户事件(鼠标点击、键盘输入)。Qt 提供 信号 / 槽机制:当用户操作控件时,控件发出信号,程序通过槽函数响应。

http://www.dtcms.com/a/342404.html

相关文章:

  • 掌控不平等的力量:深入解析帕雷托分布与二八法则的数学内核
  • python测试开发django-1.开始hello world!
  • 《零基础入门AI:深度学习之NLP基础学习》
  • 在Python中, list相减 要从一个列表(valid_points)中排除另一个列表(yuanjian_jiaodian)的所有元素
  • Linux CentOS 安装 .net core 3.1
  • 银河麒麟V10系统离线安装zabbix-agent教程
  • 18维度解密·架构魔方:一览无遗的平衡艺术
  • nginx-重定向-正则表达式-路由匹配优先级
  • Qt截图工具项目开发教程 - 从零开始构建系统截图工具
  • 【ARM】Keil MDK如何指定单文件的优化等级
  • 牛津大学xDeepMind 自然语言处理(5)
  • 基于 Kubernetes 的 WordPress 网站部署(使用 ConfigMap)
  • Spring两个核心IoCDI(一)
  • javaweb开发笔记—— 前端工程化
  • 当安全遇上资源瓶颈:轻量级加密为何成为 IoT 时代的刚需?
  • 基于 FPGA 的电磁超声脉冲压缩检测系统
  • 家里Windows,公司Linux?通过cpolar,WSL开发环境无缝切换
  • Python数据可视化利器:Matplotlib从入门到实战全解析
  • 今天我们继续学习计算机网络技术,Cisco软件,三层交换机以及RIP动态协议
  • 从零开始:JDK 在 Windows、macOS 和 Linux 上的下载、安装与环境变量配置
  • DeepSeek R2难产:近期 DeepSeek-V3.1 发布,迈向 Agent 时代的第一步
  • 《杠杆》电视剧分析学习
  • 【python与生活】如何从视频中提取关键帧?
  • JAVA-15 (2025.08.20学习记录)
  • 数据库面试常见问题
  • 【OpenGL】LearnOpenGL学习笔记13 - 深度测试、模板测试
  • 05 ODS层(Operation Data Store)
  • LeetCode算法日记 - Day 18: 只出现一次的数字、只出现一次的数字III
  • 通信工程学习:什么是Template Matching模版匹配
  • iOS 文件管理全景实战 多工具协同提升开发与调试效率