0基础学Django

1. web程序的流程

2. mvc和mvt

2.1 MVT模式

2.2 mvc模式

3. 创建Django

3.1 创建工程

django-admin startproject name

3.2 创建子应用

python manager.py startapp name

  • admin.py文件跟网站的后台管理站点配置相关
  • apps.py文件用于配置当前子应用的相关信息
  • migrations目录用于存放数据库迁移历史文件
  • models.py文件用户保有数据库模型类
  • tests.py文件用于开发测试用例,编写单元测试
  • views.py文件用于编写Web应用视图。

3.3 注册子应用

4. ORM

  • 1.我们的模型类 需要维承自 models.Model
  • 2.系统会自动为我们添加一个主键--id
  • 3.字段
  • 字段名=model.类型(选项)
  • 字段名其实就是数据表的字段名
  • 字段名不要使用 python,mysql等关键字
  • char(M)
  • varchar(M)
  • M 就是选项

4.1 模型迁移 -建表

python manage.py makemigrations

python manage.py migrate

5.站点管理

6. 连接MYSQL

7. Django 模型

1. 数值字段 (Numeric Fields)

python

复制代码
# 整数字段
models.IntegerField()        # 整数
models.SmallIntegerField()   # 小整数
models.BigIntegerField()     # 大整数
models.PositiveIntegerField() # 正整数
models.PositiveSmallIntegerField() # 正小整数

# 浮点数字段
models.FloatField()          # 浮点数
models.DecimalField(max_digits=5, decimal_places=2) # 十进制数

# 布尔字段
models.BooleanField()        # 布尔值
models.NullBooleanField()    # 可空布尔值 (Django 3.1+ 已废弃,用 BooleanField(null=True) 代替)

2. 字符串字段 (String Fields)

python

复制代码
models.CharField(max_length=255)          # 字符串
models.TextField()                        # 长文本
models.SlugField()                        # URL 友好的字符串
models.URLField()                         # URL
models.EmailField()                       # 邮箱地址
models.UUIDField()                        # UUID

3. 日期和时间字段 (Date and Time Fields)

python

复制代码
models.DateField()                        # 日期
models.DateTimeField()                    # 日期时间
models.TimeField()                        # 时间
models.DurationField()                    # 时间间隔

4. 文件字段 (File Fields)

python

复制代码
models.FileField(upload_to='files/')      # 文件
models.ImageField(upload_to='images/')    # 图片
models.FilePathField(path='/path/to/files') # 文件路径

5. 关系字段 (Relationship Fields)

python

复制代码
models.ForeignKey('OtherModel', on_delete=models.CASCADE)      # 外键
models.ManyToManyField('OtherModel')                           # 多对多
models.OneToOneField('OtherModel', on_delete=models.CASCADE)   # 一对一

6. 其他字段 (Other Fields)

python

复制代码
models.BinaryField()                      # 二进制数据
models.GenericIPAddressField()            # IP 地址
models.JSONField()                        # JSON 数据 (Django 3.1+)

7. 自定义和第三方字段

python

复制代码
# 需要安装第三方库
from django.contrib.postgres.fields import ArrayField, HStoreField
ArrayField(models.IntegerField())         # PostgreSQL 数组字段
HStoreField()                             # PostgreSQL HStore 字段

完整示例

python

复制代码
class ExampleModel(models.Model):
    # 数值字段
    integer_field = models.IntegerField()
    small_integer = models.SmallIntegerField()
    price = models.DecimalField(max_digits=10, decimal_places=2)
    rating = models.FloatField()
    is_active = models.BooleanField(default=True)
    
    # 字符串字段
    title = models.CharField(max_length=200)
    description = models.TextField()
    slug = models.SlugField()
    website = models.URLField()
    email = models.EmailField()
    unique_id = models.UUIDField(default=uuid.uuid4, editable=False)
    
    # 日期时间字段
    created_date = models.DateField(auto_now_add=True)
    created_datetime = models.DateTimeField(auto_now_add=True)
    event_time = models.TimeField()
    
    # 文件字段
    document = models.FileField(upload_to='documents/')
    photo = models.ImageField(upload_to='photos/')
    
    # 关系字段
    category = models.ForeignKey('Category', on_delete=models.CASCADE)
    tags = models.ManyToManyField('Tag')
    user_profile = models.OneToOneField('UserProfile', on_delete=models.CASCADE)
    
    # 其他字段
    ip_address = models.GenericIPAddressField()
    settings = models.JSONField(default=dict)

常用字段参数

大多数字段都支持这些通用参数:

python

复制代码
models.CharField(
    verbose_name='显示名称',    # 可读名称
    max_length=100,           # 最大长度
    default='默认值',          # 默认值
    null=True,                # 数据库允许 NULL
    blank=True,               # 表单允许为空
    choices=CHOICES,          # 选择项
    unique=True,              # 唯一值
    db_index=True,            # 数据库索引
    help_text='帮助文本'       # 帮助文本
)
相关推荐
jufeng13073 小时前
【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 1 篇】
人工智能·python·架构·agent
weixin_431600443 小时前
NestJS 入门(3):Guard 如何挡住未登录请求?
前端·后端·学习·nest.js
IT_陈寒4 小时前
JavaScript类型转换把我坑惨了,这破玩意真该早点搞明白
前端·人工智能·后端
用户938515635074 小时前
手写一个 LLM Harness 框架:用工程化手段把大模型幻觉踩在脚下
javascript·人工智能·后端
wei_shuo5 小时前
KES 云原生部署与弹性扩展:容器化、Kubernetes编排与自动伸缩
后端
一木之林5 小时前
Python.五.(一)--1. 并发编程、异步IO与多进程
后端
feng尘5 小时前
# 彻底搞懂 ReentrantLock 与 tryLock:从秒杀实战到 AQS 独占模式源码剖析
后端
啷里格啷5 小时前
Linux进程管理完全指南:从基础到云原生编排
后端·架构
洛阳泰山5 小时前
AI 应用层被 Python 卷成红海,为什么我偏要用 Java 造一个 RAG + 工作流引擎?
java·人工智能·后端
Wz_z_z_z5 小时前
SpringBoot Actuator 泄露挖掘实战:从 /env 到 heapdump
后端