【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 管理后台:
步骤:
- 在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
- 在admin.py中将模型注册到管理后台
from django.contrib import admin from .models import Articleadmin.site.register(Article) # 注册模型
- 运行迁移,创建数据库表
python manage.py makemigrations python manage.py migrate
- 创建管理员账号
python manage.py createsuperuser
- 启动服务器
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.定义 业务模型(比如
Book
、Student
) → 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界面自定义控件,通过 ModelAdmin
的 form
或 formfield_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 内置的 TextInput
、Select
、DateInput
等不够用,你可以继承 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
里用form
或formfield_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 提供 信号 / 槽机制:当用户操作控件时,控件发出信号,程序通过槽函数响应。