Django入门指南:Python全栈框架解析

1. Django 是什么?

Django 是一个高级 Python Web 框架,遵循 MTV(Model-Template-View)模式(类似 MVC),提供:

  • 全栈功能:ORM、模板引擎、路由、认证等
  • 开箱即用:自带 Admin 后台、缓存、国际化支持
  • 安全优先:自动防范 SQL 注入、XSS、CSRF 等攻击

2. 核心组件

(1) 模型(Model)
python 复制代码
# models.py
from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    pub_date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title
  • ORM:用 Python 类定义数据库表
  • 数据迁移python manage.py makemigrationsmigrate
  • 查询 APIArticle.objects.filter(title__contains="Django")
(2) 视图(View)
python 复制代码
# views.py
from django.shortcuts import render
from .models import Article

def article_list(request):
    articles = Article.objects.all()
    return render(request, 'blog/list.html', {'articles': articles})
  • 处理请求 :接收 HttpRequest,返回 HttpResponse
  • 两种形式
    • 函数视图(FBV)
    • 类视图(CBV):class ArticleListView(ListView)
(3) 模板(Template)
python 复制代码
<!-- templates/blog/list.html -->
{% for article in articles %}
  <h2>{{ article.title }}</h2>
  <p>{{ article.content|truncatewords:30 }}</p>
{% endfor %}
  • 变量{``{ variable }}
  • 标签{% for %}{% if %}
  • 过滤器|lower|date:"Y-m-d"
(4) URL 路由
python 复制代码
# urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('articles/', views.article_list, name='article-list'),
]
  • 路径转换器<int:id><slug:title>
  • 命名 URL{% url 'article-list' %}

3. Django 工作流程

  1. 请求进入 → URL 路由匹配
  2. 调用对应视图 → 处理业务逻辑
  3. 操作模型 → 数据库 CRUD
  4. 渲染模板 → 返回 HTML 响应

4. 关键特性

(1) Admin 后台
python 复制代码
# admin.py
from django.contrib import admin
from .models import Article

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title', 'pub_date')
  • 自动生成/admin 界面
  • 自定义:列表显示、搜索、过滤
(2) 表单处理
python 复制代码
# forms.py
from django import forms

class ArticleForm(forms.ModelForm):
    class Meta:
        model = Article
        fields = ['title', 'content']
  • 自动验证form.is_valid()
  • CSRF 防护{% csrf_token %}
(3) 用户认证
python 复制代码
from django.contrib.auth import authenticate, login

def login_view(request):
    user = authenticate(username=request.POST['username'], password=request.POST['password'])
    if user:
        login(request, user)
  • 内置模型UserGroupPermission
  • 装饰器@login_required

5. 项目结构

python 复制代码
myproject/
├── manage.py          # 命令行工具
├── myproject/         # 项目配置
│   ├── settings.py    # 数据库/中间件等设置
│   ├── urls.py        # 根路由
│   └── wsgi.py        # 生产部署入口
└── myapp/             # 应用模块
    ├── migrations/    # 数据库迁移文件
    ├── admin.py       # Admin 配置
    ├── models.py      # 数据模型
    ├── views.py       # 业务逻辑
    └── templates/     # 模板文件

6. 快速启动

bash 复制代码
# 安装
pip install django

# 创建项目
django-admin startproject myproject
cd myproject

# 创建应用
python manage.py startapp myapp

# 运行开发服务器
python manage.py runserver

7. 最佳实践

  1. 应用拆分 :每个功能模块作为独立应用(如 usersblog
  2. 环境隔离 :使用 python-decouple 管理敏感配置
  3. 静态文件STATICFILES_DIRS + collectstatic
  4. 性能优化
    • 查询优化:select_related()prefetch_related()
    • 缓存:@cache_page
  5. 安全措施
    • DEBUG=False 生产环境
    • ALLOWED_HOSTS 严格配置

8. 扩展推荐

  • REST API:Django REST Framework (DRF)
  • 实时功能:Django Channels
  • 异步支持:Django 3.1+ 原生异步视图
  • 测试工具TestCasepytest-django

通过以上内容,您能快速理解 Django 的核心机制。建议从官方教程(https://docs.djangoproject.com/)开始实践,逐步构建完整项目!

相关推荐
2501_914245938 分钟前
构建 Go CLI 应用的最佳实践:纯 Go 交互式命令行库选型与使用指南
jvm·数据库·python
m0_514520579 分钟前
Go语言变量如何声明和使用_Go语言变量定义完整教程【通俗】
jvm·数据库·python
weixin_5860614621 分钟前
CSS Grid布局如何解决图片溢出网格单元_设置object-fit与网格尺寸.txt
jvm·数据库·python
秋924 分钟前
数据库对比同步工具,快速比较开发库与生产库直接的差别,并自动生成存在差异的sql语句
数据库·oracle
Greyson141 分钟前
CSS Grid布局如何解决图片溢出网格单元_设置object-fit与网格尺寸.txt
jvm·数据库·python
Whitemeen太白41 分钟前
查询子级分类、父级分类、叶子节点分类(MySQL / Oracle )
数据库·mysql·oracle
C#程序员一枚41 分钟前
高可用(High Availability, HA)
数据库·c#
2401_883600251 小时前
Redis如何查询特定用户的排名_利用ZREVRANK指令获取ZSet降序名次
jvm·数据库·python
2301_777599371 小时前
如何决定是否需要创建索引_数据区分度与基数Cardinality计算
jvm·数据库·python
m0_514520571 小时前
SQL在SQL存储过程中优化子查询_缓存中间结果减少开销
jvm·数据库·python