Django3 核心入门知识点
豆包给出的知识点:
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.py的INSTALLED_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:整数DateTimeFieldauto_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 / POSTrequest.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 自带后台,快速做数据管理页面。
- 创建超级管理员
python manage.py createsuperuser
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")
七、中间件、静态文件、部署基础
- 中间件 middleware:请求到达视图之前 / 响应返回之前做统一处理,
settings.py MIDDLEWARE settings.pySTATIC_URL = '/static/'静态文件访问前缀MEDIA_ROOT / MEDIA_URL用户上传文件
- 开发服务器仅用于开发;生产使用 gunicorn + nginx。
八、Django3 入门学习路线
- 环境搭建,理解项目 /app,跑通 hello world 页面
- MTV 完整流程:写 model → 写 view → 配 urls → 写 template,完成简单列表页、详情页
- ORM 增删改查,熟悉数据库操作
- 模板语法、模板继承、静态文件
- admin 后台
- GET/POST 表单提交,Form 表单
- 用户登录注册,session
- 小项目练习:简易博客、留言板
- 进阶:类视图 CBV,分页,上传文件
最简完整小流程示例
- 创建 app 并注册
- models 写模型,makemigrations+migrate
- views 写视图函数查询数据
- urls 配置路由
- templates 写 html 模板渲染数据
- runserver 访问测试
坑提醒:
- app 忘记注册;
- 模板路径写错;
- 修改 model 没有执行迁移;
- html 模板忘记
{% load static %}。

浙公网安备 33010602011771号