Django 入门

定位

Django 是「全家桶」框架:ORM、后台管理、认证、表单、缓存、国际化全都有,且质量稳定。二十年的积累,是 Python Web 里最成熟的选择。

最被低估的能力是 admin——定义好模型,后台管理界面自动生成,带搜索、筛选、权限。做内部系统能省掉一半工作量。

安装与创建

pip install django
django-admin startproject mysite
cd mysite
python manage.py startapp blog
python manage.py migrate          # 建表
python manage.py createsuperuser  # 建管理员
python manage.py runserver

访问 http://127.0.0.1:8000/admin/ 就能看到后台。

最小示例

1. 定义模型

# blog/models.py
from django.db import models

class Article(models.Model):
    title      = models.CharField(max_length=200)
    slug       = models.SlugField(unique=True)
    content    = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    is_pub     = models.BooleanField(default=True)

    class Meta:
        ordering = ['-created_at']

    def __str__(self):
        return self.title

2. 注册到 admin

# blog/admin.py
from django.contrib import admin
from .models import Article

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
    list_display  = ('title', 'created_at', 'is_pub')
    list_filter   = ('is_pub', 'created_at')
    search_fields = ('title', 'content')
    prepopulated_fields = {'slug': ('title',)}

这十行代码就是一个可用的内容管理系统:列表、筛选、搜索、富文本编辑、权限控制全有了。

3. 视图

# blog/views.py
from django.shortcuts import render, get_object_or_404
from .models import Article

def article_list(request):
    articles = Article.objects.filter(is_pub=True)
    return render(request, 'blog/list.html', {'articles': articles})

def article_detail(request, slug):
    article = get_object_or_404(Article, slug=slug)
    return render(request, 'blog/detail.html', {'article': article})

4. 路由

# blog/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.article_list, name='list'),
    path('<slug:slug>/', views.article_detail, name='detail'),
]

核心概念

1. ORM 与迁移

Django 的 ORM 直接绑定迁移系统:改模型 → makemigrations → migrate。

python manage.py makemigrations
python manage.py migrate

迁移文件要进版本控制。它是数据库结构的唯一真相。

2. MTV 而不是 MVC

Django 叫 Model-Template-View,实际对应 MVC 的 Model-View-Controller:

Django传统 MVC
ModelModel
TemplateView
ViewController

3. settings 是分环境的

一个 settings.py 撑不住多环境。常见做法:

settings/
├── base.py       # 公共配置
├── dev.py        # from .base import *
└── prod.py

用 DJANGO_SETTINGS_MODULE=mysite.settings.prod 切换。

常见坑

① manage.py runserver 不能上生产

它是开发服务器,单线程、无并发处理、没做安全检查。生产用 gunicorn / uvicorn:

gunicorn mysite.wsgi:application -w 4 -b 0.0.0.0:8000

② 忘记 ALLOWED_HOSTS

生产环境必须配置,否则所有请求被拒:

ALLOWED_HOSTS = ['example.com', 'www.example.com']

③ N+1 查询

# 差:每篇文章查一次作者
for a in Article.objects.all():
    print(a.author.name)

1. 好:一次 join
for a in Article.objects.select_related('author').all():
    print(a.author.name)

多对多用 prefetch_related。这是 Django 最常见的性能问题。

④ 静态文件在 DEBUG=False 下 404

runserver 会自动服务静态文件,生产不会。要 collectstatic + 交给 Nginx/WhiteNoise。

什么时候选它

  • 内容型网站、博客、CMS
  • 内部管理系统(admin 优势巨大)
  • 需求相对标准、要快速上线
  • 团队需要长期维护(Django 的稳定性是资产)

不选它的场景:纯 API 服务(FastAPI 更轻更快)、需要极致异步性能、团队已经深度使用异步生态。

和 FastAPI 的取舍

DjangoFastAPI
后台管理自带无
ORM自带且强绑定自选
API 文档需 DRF + drf-spectacular自动生成
异步后补的原生
适合网站 + 后台纯 API

判断标准:需要给人用的后台界面吗?需要 → Django。只是给程序调用的 API → FastAPI。

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇