Skip to content

choudan123/DJango-firstapp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Django 学习笔记感悟

本文档仅展示对官方文档有疑问或者有感触的地方。每次文档中出现大部分视图的改变时,更新 version。


目录


version-1: first-Django-app part 1-4

  1. Integer 和 Bigint 的区别
    区别在于存储范围的不同,Integer 为 32 位,BigInt 为 64 位。

  2. 连接数据库时报错
    在连接数据库时遇见报错问题,在上一项目并未出现,使用 pymysql 修复。

  3. 输出 SQL 指令
    使用 python manage.py sqlmigrate polls 0001 能输出对应的 MySQL 指令。

  4. 索引中的哈希值
    CREATE INDEX "polls_choice_question_id_c5b4b260" ON "polls_choice" 创建索引中的 id_c5b4b260 是什么?
    id_c5b4b260 为哈希值,为索引提供唯一性。

  5. 定制模型的字符串显示

def __str__(self):
    return self.question_text

为什么用 __str__()?用于给 Django 一个默认值,在显示 str 时可以显示文本内容。

  1. 反向关联
    q.choice_set 反向关联,为同一个问题生成选项。

  2. ‼️‼️‼️重要思想‼️‼️‼️
    为什么我们使用辅助函数 get_object_or_404() 而不是自己捕获 ObjectDoesNotExist 异常?还有,为什么模型 API 不直接抛出 ObjectDoesNotExist 而是抛出 Http404

  • 因为这样做会增加模型层和视图层的耦合性。指导 Django 设计的最重要的思想之一就是保证松散耦合。一些受控的耦合被包含在 django.shortcuts 模块中。
  • 对于耦合的理解:
    (1) models 抛出异常时表示的是数据查询业务的异常,不涉及 views 也就是 http 协议相关的异常。如果直接用会导致非必要的耦合。
    (2) 使用 get_object_or_404() 函数实现受控耦合,从而减少非必要耦合。
  1. F() 表达式
    F() 表达式可直接进行数据库操作,减少并发问题。

version-2: first-Django-app part 4-5

  1. 自定义上下文变量名
class IndexView(generic.ListView):
    template_name = "polls/index.html"
    context_object_name = "latest_question_list"

    def get_queryset(self):
        """Return the last five published questions."""
        return Question.objects.order_by("-pub_date")[:5]

此段代码中定义 context_object_name = "latest_question_list" 是为了给 Django 提供上下文变量名。

  1. ORM 查询条件
    Question.objects.filter(pub_date__lte=timezone.now()).order_by("-pub_date")[:5]
    此代码中的 pub_date__lte 为 ORM 中内置的查询条件,可作为判断语句使用。

version-finall: first-Django-app part 5-8

  1. ‼️‼️‼️测试驱动开发‼️‼️‼️
    一些程序员遵循一种称为“测试驱动开发”(TDD)的准则;他们实际上在编写代码之前先编写测试。这看起来可能违反直觉,但实际上它与大多数人经常做的事情类似:描述一个问题,然后编写一些代码来解决它。测试驱动开发将问题形式化为 Python 测试用例。

更普遍的情况是,一个刚接触自动化测试的新手更倾向于先写代码,然后再写测试。虽然提前写测试可能更好,但是晚点写起码也比没有强。

有时候很难决定从哪里开始下手写测试。如果你才写了几千行 Python 代码,选择从哪里开始写测试确实不怎么简单。如果是这种情况,那么在你下次修改代码(比如加新功能,或者修复 Bug)之前写个测试是比较合理且有效的。

个人感悟:
在读到此文档之前,本人开发文件都是开发驱动,再编写测试,甚至没有用到 Django 强大的测试功能。只是简单地对接口的返回进行检测。后续若有开发项目,将会学习该模式。

  1. 自定义后台界面和风格
    现在在 templates 目录内创建一个名为 admin 的目录,并将默认的 Django 管理界面模板目录中的模板文件 admin/base_site.html 复制到该目录中。默认的 Django 管理界面模板目录位于 Django 源代码中(django/contrib/admin/templates)。

可覆盖 Django 默认模板实现自己功能。


部分成果截图

屏幕截图 2025-10-22 202825 屏幕截图 2025-10-22 202831 屏幕截图 2025-10-22 202839 屏幕截图 2025-10-23 005117 屏幕截图 2025-10-23 135243 屏幕截图 2025-10-23 141652 屏幕截图 2025-10-23 143106 屏幕截图 2025-10-23 143122 屏幕截图 2025-10-23 143401

About

复现DJango官方文档应用

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors