Django 基本操作

安装与项目创建
  • 安装 Django 的方式(pip 安装)
  • 使用 django-admin startproject 创建新项目
  • 项目目录结构解析(settings.py, urls.py, wsgi.py 等)
启动开发服务器
  • 使用 python manage.py runserver 启动本地开发环境
  • 访问 http://127.0.0.1:8000/ 确认 Django 运行状态
  • 修改默认端口与 IP 绑定(runserver 0.0.0.0:8080
创建应用(App)
  • 使用 python manage.py startapp 创建新应用
  • settings.py 中注册应用(INSTALLED_APPS
  • 应用目录结构解析(models.py, views.py, admin.py 等)
模型(Model)与数据库
  • 定义模型类(继承 django.db.models.Model
  • 常用字段类型(CharField, IntegerField, DateTimeField 等)
  • 执行数据库迁移(makemigrationsmigrate
  • 使用 Django Shell 进行数据操作(python manage.py shell
视图(View)与 URL 路由
  • 编写视图函数(基于 HttpResponserender
  • 配置 URL 路由(urls.py 中的 pathre_path
  • 类视图(View, ListView, DetailView)的基本使用
模板(Template)系统
  • 模板文件存放位置(templates/ 目录)
  • 基本模板语法(变量 { { var }}, 标签 {% tag %}
  • 模板继承({% extends %}{% block %}
Django Admin 后台管理
  • 创建超级用户(python manage.py createsuperuser
  • 注册模型到 Admin 后台(admin.site.register(ModelName)
  • 自定义 Admin 界面(ModelAdmin 类)
表单(Form)处理
  • 使用 Django 表单类(forms.Formforms.ModelForm
  • 表单渲染与验证(is_valid() 方法)
  • CSRF 保护机制({% csrf_token %}
静态文件管理
  • 配置 STATIC_URLSTATICFILES_DIRS
  • 使用 {% static %} 标签加载静态文件(CSS/JS/图片)
  • 生产环境静态文件收集(collectstatic 命令)
部署基础
  • 常见部署方式(Gunicorn + Nginx, Docker)
  • 配置 ALLOWED_HOSTSDEBUG 模式
  • 数据库配置(PostgreSQL/MySQL 替代 SQLite)
常见问题与调试
  • 使用 Django Debug Toolbar 进行性能分析
  • 日志配置(LOGGING 设置)
  • 处理常见错误(NoReverseMatch, FieldError 等)

数据表之间的关系类型

数据表之间的关系主要分为三种基本类型,这些关系在关系型数据库中非常常见。

1. 一对一关系(One-to-One Relationship)

  • 一个表中的每条记录只对应另一个表中的一条记录。
  • 示例:员工表和社保号表,每个员工只有一个社保号,反之亦然。
  • 实现方式:通常通过外键约束实现,且外键需设置为唯一(UNIQUE)。

2. 一对多关系(One-to-Many Relationship)

  • 一个表中的一条记录可以对应另一个表中的多条记录。
  • 示例:部门表和员工表,一个部门可以有多个员工,但一个员工只能属于一个部门。
  • 实现方式:在“多”的一方(员工表)添加指向“一”的一方(部门表)的外键。

3. 多对多关系(Many-to-Many Relationship)

  • 一个表中的多条记录可以关联另一个表中的多条记录。
  • 示例:学生表和课程表,一个学生可以选修多门课程,一门课程也可以被多个学生选修。
  • 实现方式:通过中间表(关联表)实现,中间表包含两个外键分别指向两个主表的主键。

其他衍生关系

自引用关系(Self-Referencing Relationship)

  • 同一张表内的记录之间存在关联。
  • 示例:员工表中的经理和下属关系,经理和下属均为员工表中的记录。
  • 实现方式:在表中添加一个指向自身主键的外键字段。

零或一关系(Zero-or-One Relationship)

  • 一种特殊的一对一关系,其中关联是可选的。
  • 示例:用户表和会员表,某些用户可能是会员(关联一条记录),而其他用户可能不是(无关联)。

关键特点总结

  • 关系的选择需根据业务逻辑设计,避免数据冗余或不一致。
  • 外键约束可确保数据完整性,但可能影响性能,需权衡使用。
  • 多对多关系必须通过中间表实现,不可直接关联。
  • 一对一(0neTo0neField):通过外键唯一约束实现,通常用于拆分大表或存储敏感数据。
  • 一对多(ForeignKey):最常见的关系,通过外键在“多”的一方指向“一”的一方。
  • 多对多(ManyToManyField):需要中间表存储两个表的外键组合。
  • 自引用:外键指向同一表的主键,用于层级数据(如组织结构)。
  • 多态关联:灵活性高,但可能牺牲外键约束的完整性。

Django 查询方法

在Django中,查询方法主要通过ORM(对象关系映射)实现,用于操作数据库。

基础查询方法
  • all(): 返回模型的所有对象,生成一个 QuerySet
Model.objects.all()
  • filter(**kwargs): 返回满足条件的对象,支持链式调用。
Model.objects.filter(name='example')
  • exclude(**kwargs): 排除满足条件的对象。
Model.objects.exclude(age__lt=18)
  • get(**kwargs): 返回单个对象,如果未找到或找到多个会抛出异常。
Model.objects.get(id=1)
  • first(): 返回 QuerySet 中的第一个对象。
Model.objects.filter(active=True).first()
  • last(): 返回 QuerySet 中的最后一个对象。
Model.objects.filter(active=True).last()
字段查询
  • values(*fields): 返回包含指定字段的字典列表。
Model.objects.values('name', 'age')
  • values_list(*fields, flat=False): 返回包含指定字段的元组列表。如果 flat=True 且只有一个字段,返回扁平化列表。
Model.objects.values_list('name', flat=True)
  • only(*fields): 仅加载指定字段,延迟加载其他字段。
Model.objects.only('name', 'email')
  • defer(*fields): 延迟加载指定字段。
Model.objects.defer('description')
排序和切片
  • order_by(*fields): 按指定字段排序,支持 - 表示降序。
Model.objects.order_by('-created_at', 'name')
  • reverse(): 反转 QuerySet 的顺序。
Model.objects.order_by('name').reverse()
  • distinct(*fields): 去除重复记录。
Model.objects.distinct('name')
  • none(): 返回空的 QuerySet
Model.objects.none()
高级查询
  • select_related(*fields): 执行 SQL JOIN 操作,优化一对一或多对一关系的查询。
Model.objects.select_related('related_model')
  • prefetch_related(*fields): 预取多对多或反向关系的对象。

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值