惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
博客园_首页
U
Unit 42
Apple Machine Learning Research
Apple Machine Learning Research
云风的 BLOG
云风的 BLOG
MongoDB | Blog
MongoDB | Blog
美团技术团队
H
Help Net Security
G
Google Developers Blog
B
Blog RSS Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
aimingoo的专栏
aimingoo的专栏
Google DeepMind News
Google DeepMind News
J
Java Code Geeks
M
MIT News - Artificial intelligence
腾讯CDC
IT之家
IT之家
Vercel News
Vercel News
C
Check Point Blog
博客园 - 三生石上(FineUI控件)
Last Week in AI
Last Week in AI
I
InfoQ
博客园 - 司徒正美
A
About on SuperTechFans

博客园 - emanlee

HTML + CSS + JS 入门核心知识点 vs code 使用python,必须安装python解释器 Ubuntu 修改 ulimit‑n(nofile,最大打开文件数) 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 Word里打出“方框中间带勾”的符号 Windows 10/11 安装 MySQL 5.7 步骤(内部使用) Python编程语言的运行速度(CPU时间),与C语言对比 设置MySQL随操作系统Ubuntu启动 2026年秋季,2027年春季,西安理工大学 校历 博文阅读密码验证 - 博客园 Windows 11,用任务栏的搜索框搜索到一个软件,点击无法打开, 是bug 拆分视频的软件工具,Avidemux 开源免费 无法在此设备上加载驱动程序,可行可用 ubuntu 设置北京日期时间 mysql 在新电脑上导入,出现错误:ERROR at line 4019: Unknown command '\''. - emanlee 安装 yarn npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。 - emanlee VS code, 最近打开过哪些项目或文件夹,把这些备份下来,到另外一台电脑上恢复 傲梅分区助手 【好用】 ubuntu 可以使用Windows远程桌面连接吗?【可以】 把xshell的全部连接和密码,从一台Windows 10电脑,迁移到Windows11电脑。 Windows 远程桌面(mstsc)完整迁移方案(含历史连接记录、RDP 配置、保存的账号密码)【可行】 Endnote,如何能完整迁移库和模版 ubuntu 安装 locate “华为杯”第八届中国研究生人工智能创新大赛
Django3 核心入门知识点
emanlee · 2026-09-08 · via 博客园 - emanlee

豆包给出的知识点:

Django3 核心入门知识点

Django 是 Python 的全栈 Web 框架,遵循 MTV 架构(Model‑Template‑View),对应通俗理解:

  • Model(模型):操作数据库
  • Template(模板):HTML 页面渲染
  • View(视图):业务逻辑,接收请求返回响应

Django3 环境:Python3.6‑3.9,命令都是 django‑admin / python manage.py

一、基础概念 & 项目结构

1. 项目与 App 区别

  • Project(项目):整个网站,全局配置,一个项目可以有多个 App
  • App(应用):功能模块,例如用户模块、文章模块、购物模块。一个项目拆分多个 app 便于维护。

2. 创建命令

# 安装
pip install django==3.2

# 创建项目 myproject
django-admin startproject myproject

# 进入项目文件夹
cd myproject

# 创建app,例如 blog
python manage.py startapp blog

# 启动开发服务器
python manage.py runserver

3. 目录结构说明

myproject/          # 项目根目录
├─ myproject/       # 项目配置文件夹
│  ├─ __init__.py
│  ├─ settings.py   # ⭐全局配置文件(注册app、数据库、模板、中间件)
│  ├─ urls.py       # ⭐主路由,总入口
│  ├─ asgi.py
│  └─ wsgi.py       # 生产部署入口
├─ blog/            # app应用
│  ├─ migrations/   # 数据库迁移文件
│  ├─ __init__.py
│  ├─ admin.py      # ⭐后台管理配置
│  ├─ apps.py
│  ├─ models.py     # ⭐模型,数据库表定义
│  ├─ tests.py
│  ├─ urls.py       # app子路由(自己新建)
│  └─ views.py      # ⭐视图函数,业务逻辑
└─ manage.py        # 项目命令行工具

重要第一步:新建的 app 必须在 settings.pyINSTALLED_APPS 里注册!

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',   # 注册自己的app
]

二、Model 模型(数据库 ORM)⭐重点

Django ORM:不用写 SQL,用 Python 类操作数据库,自动生成表。

1. 定义模型 blog/models.py

from django.db import models

class Article(models.Model):
    # 字段
    title = models.CharField(max_length=100, verbose_name="标题")
    content = models.TextField(verbose_name="内容")
    create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")

    class Meta:
        verbose_name = "文章"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.title

常用字段

  • CharField(max_length):短字符串
  • TextField:大文本
  • IntegerField:整数
  • DateTimeField
    • auto_now_add=True 创建时自动记录时间
    • auto_now=True 每次修改自动更新时间
  • BooleanField 布尔
  • ForeignKey 外键(一对多)
  • ManyToManyField 多对多

2. 迁移命令(模型→数据库)

修改 models 之后必须执行:

# 1.生成迁移文件,记录模型变更
python manage.py makemigrations

# 2.执行迁移,真正在数据库建表
python manage.py migrate

3. ORM 常用增删改查

# 查所有
Article.objects.all()

# 条件查询
Article.objects.filter(title="xxx")
Article.objects.get(id=1) # 获取单条,不存在会抛异常

# 创建数据
Article.objects.create(title="第一篇", content="hello django")

# 修改
art = Article.objects.get(id=1)
art.title = "新标题"
art.save()

# 删除
art.delete()

4. 数据库配置 settings.py

默认 sqlite3(文件数据库,开发用);生产切换 MySQL。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

三、View 视图(业务逻辑)

两种写法:函数视图 FBV(入门推荐)、类视图 CBV

1. 函数视图 views.py

from django.shortcuts import render, HttpResponse

def index(request):
    # request:请求对象,包含GET/POST、cookie、session等
    if request.method == "GET":
        return HttpResponse("首页文字")
    return HttpResponse("其他")

# 返回模板页面
def article_list(request):
    articles = Article.objects.all()
    # render渲染模板,第二个参数模板名,第三个传参字典
    return render(request, "blog/article_list.html", {"article_list": articles})

request 对象常用:

  • request.method 请求方式 GET / POST
  • request.GET.get("key") 获取 url 参数
  • request.POST.get("key") 获取表单 post 数据
  • request.session 会话
  • request.user 当前登录用户

2. 路由 urls.py

路由作用:url 地址 → 绑定视图函数

主路由 myproject/urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')), # 引入app内部路由
]

app 子路由 blog/urls.py(手动新建)

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name="index"),
    path('articles/', views.article_list, name="article_list"),
]

name:路由别名,模板中可以反向解析 url,硬编码地址解耦。

3. URL 传参

# urls.py
path('article/<int:aid>/', views.detail, name="detail")

# views.py
def detail(request, aid):
    return HttpResponse(f"文章id:{aid}")

四、Template 模板(HTML)【这个了解即可,以后用前后端分离,前端用Vue】

模板存放:默认在 app 下面新建 templates/blog/ 文件夹,放 html 文件。

Django 模板语言 DTL,在 HTML 中写模板语法。

1. 变量渲染 {{ 变量 }}

<!-- 渲染后台传过来的变量 -->
<h1>{{ article.title }}</h1>
<p>{{ article.content }}</p>

2. 循环 {% for %}

<ul>
{% for art in article_list %}
    <li>{{ art.title }}</li>
{% empty %}
    <li>暂无数据</li>
{% endfor %}
</ul>

3. 判断 {% if %}

{% if art.create_time %}
    <span>{{ art.create_time }}</span>
{% else %}
    <span>无时间</span>
{% endif %}

4. 模板继承(重点,复用页面)

base.html 父模板

<!DOCTYPE html>
<html>
<body>
{% block content %}
<!-- 子页面填充这里 -->
{% endblock %}
</body>
</html>

子页面

{% extends "blog/base.html" %}

{% block content %}
<h2>文章列表</h2>
{% endblock %}

5. 反向解析 url

<!-- 使用路由name生成地址,不要写死url -->
<a href="{% url 'detail' aid=art.id %}">查看详情</a>

6. 静态文件处理 css/js/img

app 下新建 static/blog/,存放 css、js、图片

{% load static %}
<link rel="stylesheet" href="{% static 'blog/style.css' %}">

五、Admin 后台管理系统 【了解】

Django 自带后台,快速做数据管理页面。

  1. 创建超级管理员
python manage.py createsuperuser
  1. blog/admin.py 注册模型,后台管理该表
from django.contrib import admin
from .models import Article

admin.site.register(Article)

访问:/admin 登录,可以直接增删改数据库数据。


六、表单 Form、用户认证、会话 

1. Form 表单 【了解】

Django Form:校验表单数据、生成表单 html,forms.py

from django import forms
from .models import Article

class ArticleForm(forms.ModelForm):
    class Meta:
        model = Article
        fields = ["title","content"]

2. 用户认证 auth

内置 User 模型:用户表

from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login, logout

# 校验账号密码
user = authenticate(username="xx", password="xx")
# 登录
login(request, user)
# 退出
logout(request)

模板判断是否登录:{% if user.is_authenticated %}

3. Session 会话

# 存
request.session["name"] = "张三"
# 取
name = request.session.get("name")

七、中间件、静态文件、部署基础

  1. 中间件 middleware:请求到达视图之前 / 响应返回之前做统一处理,settings.py MIDDLEWARE
  2. settings.py
    • STATIC_URL = '/static/' 静态文件访问前缀
    • MEDIA_ROOT / MEDIA_URL 用户上传文件
  3. 开发服务器仅用于开发;生产使用 gunicorn + nginx。

八、Django3 入门学习路线

  1. 环境搭建,理解项目 /app,跑通 hello world 页面
  2. MTV 完整流程:写 model → 写 view → 配 urls → 写 template,完成简单列表页、详情页
  3. ORM 增删改查,熟悉数据库操作
  4. 模板语法、模板继承、静态文件
  5. admin 后台
  6. GET/POST 表单提交,Form 表单
  7. 用户登录注册,session
  8. 小项目练习:简易博客、留言板
  9. 进阶:类视图 CBV,分页,上传文件

最简完整小流程示例

  1. 创建 app 并注册
  2. models 写模型,makemigrations+migrate
  3. views 写视图函数查询数据
  4. urls 配置路由
  5. templates 写 html 模板渲染数据
  6. runserver 访问测试

坑提醒:

  1. app 忘记注册;
  2. 模板路径写错;
  3. 修改 model 没有执行迁移;
  4. html 模板忘记 {% load static %}