环境准备(细化)
o Python 版本选择:Django 4.2 最低支持 Python 3.8,但推荐 3.10+(包含更多优化),可通过 Python 官网 下载安装。
o 虚拟环境作用:避免不同项目的依赖冲突。创建后,终端提示符前会显示 (venv) 表示已激活。
o 安装验证:执行 django-admin --version,若显示 4.2.x 则安装成功。
1. 项目与APP(细化)
o 项目与APP的区别:
o 项目(blog_project)是整个网站的配置集合(如路由、数据库设置)。
o APP(blog)是功能模块(如博客功能),一个项目可包含多个APP(如后续可添加comments、users等)。
o 注册APP注意事项:必须在 INSTALLED_APPS 中添加APP名称,否则Django无法识别其模型、模板等。
2. 模型设计(细化)
o 字段说明:
o CharField(max_length=200):适用于短文本(如标题),max_length 为必填项。
o TextField():适用于长文本(如文章内容),无长度限制。
o ForeignKey(User, ...):关联Django内置的用户模型,on_delete=models.CASCADE 表示“若用户被删除,其文章也随之删除”。
o DateTimeField(default=timezone.now):默认值为创建时间(调用函数而非结果,故不加括号)。
o auto_now=True:每次模型保存时自动更新为当前时间(用于记录最后修改时间)。
o 迁移命令作用:
o makemigrations:根据模型变化生成迁移文件(存于 blog/migrations/),仅记录变更逻辑。
o migrate:执行迁移文件,将变更同步到数据库(实际创建表结构)。
3. Admin后台(细化)
o @admin.register(Post):等价于 admin.site.register(Post, PostAdmin),用于将模型注册到后台。
o list_display:指定后台列表页显示的字段(默认只显示 __str__ 方法返回的值)。
o search_fields:添加搜索框,支持按指定字段模糊搜索。
o 超级用户创建:需输入用户名、邮箱(可选)、密码(输入时不显示,需确认),用于登录
http://127.0.0.1:8000/admin/。
4. URL路由与视图(细化)
o 类视图优势:ListView 已封装“查询模型列表并传递到模板”的逻辑,无需手动编写查询代码。
o context_object_name = 'posts':指定模板中使用的变量名(默认是 object_list)。
o ordering = ['-created_at']:按创建时间倒序排列(- 表示降序)。
o 路由参数说明:
o path('post/<int:pk>/', ...) 中,<int:pk> 表示匹配整数类型的主键(pk 即 id),用于定位具体文章。
o 主路由与应用路由:通过 include('blog.urls') 将应用路由挂载到主路由,实现路由拆分,便于维护。
5. 模板(细化)
o 目录结构要求:Django默认在 APP/templates/APP名称/ 下查找模板(如 blog/templates/blog/),避免不同APP的模板文件名冲突。
o 模板语法:
o {% extends "blog/base.html" %}:继承基础模板,复用公共部分(如导航栏、样式)。
o {% block content %}{% endblock %}:定义可替换的内容块,子模板通过重写该块实现个性化内容。
o {{ post.title }}:输出变量值,{% url 'post_detail' post.pk %}:生成详情页URL(参数为文章主键)。
o {{ post.content|truncatechars:100 }}:使用过滤器截断内容为100字符(便于列表页展示摘要)。
6. 表单与创建文章(细化)
o ModelForm 作用:自动根据模型生成表单,无需手动定义字段,Meta 类指定关联的模型和字段。
o PostCreateView 细节:
o success_url = '/':表单提交成功后跳转回首页。
o form_valid 方法:重写该方法为文章自动设置作者(当前登录用户),确保文章归属正确。
o 权限注意:此时未添加登录验证,若直接访问 post/new/ 会报错(self.request.user 为空),后续需通过 LoginRequiredMixin 限制仅登录用户可创建文章。
7. Django 4 新特性(细化)
o 异步视图:
o 需在视图中使用 async def 定义方法,支持 await 异步操作(如数据库查询、网络请求)。
o 需通过 ASGI 服务器运行(默认 runserver 已支持),相比传统 WSGI 能更高效处理并发请求。
o 使用前需导入 asyncio 模块。
o 密码哈希:
o Argon2 是目前安全性较高的算法,相比 Django 旧版本默认的 PBKDF2 更能抵抗暴力破解。
o PASSWORD_HASHERS 列表中,越靠前的算法优先级越高(用户密码会用第一个可用算法加密)。
8. 运行与访问(细化)
o python manage.py runserver 默认启动在 127.0.0.1:8000,可通过 runserver 0.0.0.0:8080 改为允许局域网访问(端口8080)。
o 首次访问首页可能无内容,需先通过 Admin 后台或 post/new/ 创建文章(需先登录,可临时注释 form_valid 中的作者设置以测试)。
通过以上细化内容,可更清晰理解每个步骤的原理和操作细节,帮助在实际开发中规避常见问题(如模板路径错误、模型字段配置不当等)。
