当前位置:首页>python>Python 零基础100天—Day59 Django 入门

Python 零基础100天—Day59 Django 入门

  • 2026-09-10 19:17:52
Python 零基础100天—Day59 Django 入门

Django 入门 — 全栈框架初体验

🕐 预计用时:2-3 小时 | 🎯 目标:掌握 Django 项目创建、MVT 架构、路由配置和 Admin 后台


📖 今日目录

  1. Django vs Flask
  2. 安装 Django
  3. 创建项目
  4. MVT 架构
  5. 路由配置
  6. 视图函数
  7. 模板系统
  8. Admin 管理后台
  9. 今日练习
  10. 今日小结

1. Django vs Flask

🏢 两大框架对比

特性
Flask
Django
定位
微框架(Micro)
全栈框架(Full-Stack)
ORM
需要 Flask-SQLAlchemy
自带 Django ORM
Admin 后台
无
自带,开箱即用
用户系统
需要 Flask-Login
自带 auth 模块
模板引擎
Jinja2
Django Template(DTL)
路由
@app.route 装饰器
urls.py 配置文件
表单
需要 Flask-WTF
自带 Forms
灵活性
极高(自由组合)
中等(约定大于配置)
学习曲线
低
中
适合项目
小项目、API、微服务
中大型项目、内容管理系统

💡 Flask 像瑞士军刀,Django 像全功能工具箱:Flask 给你一把刀,你自己组装工具。Django 给你一整箱工具,开箱即用,但箱子本身有重量。两者都是顶级框架,学会任何一个都能找到好工作。两个都学?那就是"双刀流"!


2. 安装 Django

# 安装pip install django# 验证python -m django --version# 输出:5.1 或类似版本号

3. 创建项目

📁 创建 Django 项目

# 创建一个名为 mysite 的项目django-admin startproject mysite# 查看生成的文件# mysite/# ├── manage.py          ← 管理工具(运行服务器、迁移等)# └── mysite/#     ├── __init__.py#     ├── settings.py    ← 项目配置#     ├── urls.py        ← 根路由#     ├── asgi.py        ← ASGI 入口#     └── wsgi.py        ← WSGI 入口

🚀 启动开发服务器

# 进入项目目录cd mysite# 启动服务器python manage.py runserver# 输出:# Starting development server at http://127.0.0.1:8000/# 指定端口python manage.py runserver 8080# 指定 IP 和端口(局域网可访问)python manage.py runserver 0.0.0.0:8000

📦 创建应用(App)

# Django 项目由多个"应用"组成# 比如博客项目:users 应用 + posts 应用 + comments 应用python manage.py startapp blog# 生成的文件:# blog/# ├── __init__.py# ├── admin.py       ← Admin 后台配置# ├── apps.py        ← 应用配置# ├── models.py      ← 数据模型# ├── tests.py       ← 测试# └── views.py       ← 视图函数

💡 项目(Project) vs 应用(App):• 项目 = 整个网站(mysite)• 应用 = 网站中的一个功能模块(blog、users、shop)类比:项目 = 公司,应用 = 部门。一个公司有多个部门,每个部门负责不同的业务。


4. MVT 架构

Django 使用 MVT(Model-View-Template) 架构,和 Flask 的自由风格不同——Django 有明确的文件组织规范。

# 请求流程:# 用户请求 → urls.py(路由) → views.py(视图) → models.py(数据) → templates(模板) → 响应# 对比 Flask 和 Django:# Flask:   @app.route → 视图函数 → render_template# Django:  urls.py    → views.py  → render()

📋 MVT 三件套

组件
文件
作用
Flask 对应
Model
models.py
数据模型(数据库表)
db.Model
View
views.py
业务逻辑
视图函数
Template
templates/
HTML 模板
templates/

5. 路由配置

🗺️ Django 路由系统

和 Flask 的装饰器不同,Django 用 urls.py 文件集中管理路由。

# mysite/urls.py(根路由)from django.contrib import adminfrom django.urls import path, includefrom blog import viewsurlpatterns = [    path('admin/', admin.site.urls),        # Admin 后台    path('', views.index, name='index'),    # 首页    path('blog/', include('blog.urls')),    # 包含 blog 应用的路由]
# blog/urls.py(应用路由)from django.urls import pathfrom . import viewsapp_name = 'blog'  # 命名空间(避免路由名冲突)urlpatterns = [    path('', views.post_list, name='post_list'),              # /blog/    path('<int:pk>/', views.post_detail, name='post_detail'), # /blog/42/    path('create/', views.post_create, name='post_create'),   # /blog/create/    path('<int:pk>/edit/', views.post_edit, name='post_edit'),# /blog/42/edit/]

📌 URL 参数

# Flask 风格(装饰器)# @app.route('/blog/<int:post_id>')# Django 风格(path 函数)# path('<int:pk>/', views.post_detail)# 参数类型对照# <int:pk>    → 整数参数(Flask: <int:pk>)# <str:name>  → 字符串参数(Flask: <name>)# <slug:slug> → URL 友好字符串(如 "hello-world")# <uuid:id>   → UUID 参数

6. 视图函数

👁️ 函数视图(FBV)

# blog/views.pyfrom django.shortcuts import render, get_object_or_404, redirectfrom django.http import JsonResponse, HttpResponsefrom .models import Post# 最简单的视图def index(request):    return HttpResponse('<h1>Hello, Django!</h1>')# 带模板的视图def post_list(request):    posts = Post.objects.all().order_by('-created_at')    return render(request, 'blog/post_list.html', {'posts': posts})# 带参数的视图def post_detail(request, pk):    post = get_object_or_404(Post, pk=pk)    return render(request, 'blog/post_detail.html', {'post': post})# JSON 响应def api_posts(request):    posts = list(Post.objects.values('id', 'title', 'created_at'))    return JsonResponse({'data': posts})

📋 Django 视图 vs Flask 视图

操作
Flask
Django
返回 HTML
render_template('x.html')render(request, 'x.html')
返回 JSON
jsonify({...})JsonResponse({...})
重定向
redirect(url_for('x'))redirect('url_name')
404
abort(404)raise Http404
 或 get_object_or_404()
获取参数
request.args.get('q')request.GET.get('q')
POST 数据
request.form['name']request.POST['name']

7. 模板系统

🎨 Django Template Language(DTL)

<!-- templates/blog/post_list.html -->{% extends "base.html" %}{% block title %}文章列表{% endblock %}{% block content %}<h1>📝 最新文章</h1>{% for post in posts %}<article>    <h2><a href="{% url 'blog:post_detail' post.pk %}">{{ post.title }}</a></h2>    <p class="meta">        {{ post.author.username }} · {{ post.created_at|date:"Y-m-d" }}    </p>    <p>{{ post.summary }}</p></article>{% empty %}    <p>暂无文章。</p>{% endfor %}{% endblock %}

📝 DTL vs Jinja2 对比

功能
Jinja2(Flask)
DTL(Django)
变量输出
{{ var }}{{ var }}
(相同)
控制语句
{% for %}{% for %}
(相同)
URL 生成
url_for('route'){% url 'name' %}
过滤器
{{ var | upper }}{{ var|upper }}
(空格可选)
继承
{% extends %}{% extends %}
(相同)
块
{% block %}{% block %}
(相同)
加载静态文件
url_for('static'){% static 'path' %}

8. Admin 管理后台

🎛️ Django Admin 的魔力

Django 最令人惊叹的功能——自动生成的管理后台。只需要注册模型,就能得到一个功能完整的 Web 管理界面。

# 第一步:创建管理员账号python manage.py createsuperuser# 输入用户名、邮箱、密码# 第二步:在 admin.py 中注册模型# blog/admin.pyfrom django.contrib import adminfrom .models import Post, Category, Comment@admin.register(Post)class PostAdmin(admin.ModelAdmin):    list_display = ['title', 'author', 'category', 'views', 'created_at']    list_filter = ['category', 'created_at', 'author']    search_fields = ['title', 'content']    date_hierarchy = 'created_at'    ordering = ['-created_at']@admin.register(Category)class CategoryAdmin(admin.ModelAdmin):    list_display = ['name', 'post_count']@admin.register(Comment)class CommentAdmin(admin.ModelAdmin):    list_display = ['post', 'author', 'created_at']    list_filter = ['created_at']
# 访问 http://127.0.0.1:8000/admin/# 用刚才创建的 superuser 账号登录# 你会看到一个完整的管理后台:# - 文章管理(增删改查、搜索、筛选、排序)# - 分类管理# - 评论管理# - 用户管理

🎉 Admin 后台 = 免费的 CMS!• 自动根据 models.py 生成表单• 支持搜索、筛选、排序、分页• 支持批量操作(批量删除、批量发布)• 可自定义显示字段、过滤条件• 权限控制(staff/superuser 区分)很多小团队直接用 Django Admin 当内容管理系统,省去自己写后台的工作量!


9. 今日练习

🏋️ 练习 1:创建博客项目

# 1. 用 startproject 创建 mysite 项目# 2. 用 startapp 创建 blog 应用# 3. 定义 Post 模型(title, content, created_at)# 4. 配置路由:首页显示文章列表# 5. 创建模板渲染文章列表

🏋️ 练习 2:Admin 后台

# 1. 创建 superuser# 2. 在 admin.py 注册 Post 模型# 3. 自定义 list_display(显示标题、作者、时间)# 4. 添加搜索和筛选功能# 5. 在 Admin 中添加 3 篇文章

🏋️ 练习 3:文章详情页

# 1. 定义路由 /blog/<int:pk>/# 2. 编写 post_detail 视图# 3. 创建 detail.html 模板# 4. 在列表页添加链接跳转到详情页

10. 今日小结

知识点
核心内容
Django 定位
全栈框架,自带 ORM/Admin/Auth/Template
项目结构
startproject(项目)+ startapp(应用)
MVT 架构
Model 数据模型 → View 视图 → Template 模板
路由
urls.py + path() + include() + 命名空间
视图
render(request, template, context) / get_object_or_404
模板
{% extends %} / {% block %} / {% url %} / {% static %}
Admin
注册模型 → 自动生成管理后台,零代码实现 CRUD

🚀 明日预告:Day 60 — Django 模型层今天我们搭建了 Django 项目的骨架,明天深入模型层——字段类型、关系定义、QuerySet 查询 API、数据库迁移。Django 的 ORM 是 Python 世界最强大的 ORM 之一,掌握它让你的数据操作效率翻倍!

轻松时刻:

请在微信客户端打开

最新文章

随机文章