📚 详细学习路线
阶段1:基础准备
1.1 Python 基础
必备知识:
- Python 语法基础
- 面向对象编程(类、继承、多态)
- 函数和模块
- 异常处理
- 虚拟环境使用
学习资源:
- 《Python Crash Course》
- Python 官方教程
1.2 Web 基础
- HTTP 协议基础
- HTML/CSS/JavaScript 基础
- 数据库基础(SQL)
阶段2:Django 核心概念
2.1 Django 入门
bash
# 环境设置
python -m venv myenv
source myenv/bin/activate # Linux/Mac
# 或 myenv\Scripts\activate # Windows
pip install django
django-admin startproject myproject
cd myproject
python manage.py startapp myapp
2.2 项目结构理解
myproject/
├── manage.py
├── myproject/
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── myapp/
├── migrations/
├── __init__.py
├── admin.py
├── apps.py
├── models.py
├── tests.py
├── views.py
└── urls.py
2.3 核心组件深入学习
Models(模型)
python
# myapp/models.py
from django.db import models
from django.contrib.auth.models import User
class Category(models.Model):
name = models.CharField(max_length=100)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
category = models.ForeignKey(Category, on_delete=models.CASCADE)
author = models.ForeignKey(User, on_delete=models.CASCADE)
is_published = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
ordering = ['-created_at']
def __str__(self):
return self.title
Views(视图)
python
# myapp/views.py
from django.shortcuts import render, get_object_or_404
from django.views.generic import ListView, DetailView, CreateView
from .models import Post
from .forms import PostForm
# 函数视图
def post_list(request):
posts = Post.objects.filter(is_published=True)
return render(request, 'blog/post_list.html', {'posts': posts})
# 类视图
class PostListView(ListView):
model = Post
template_name = 'blog/post_list.html'
context_object_name = 'posts'
paginate_by = 10
def get_queryset(self):
return Post.objects.filter(is_published=True)
class PostDetailView(DetailView):
model = Post
template_name = 'blog/post_detail.html'
class PostCreateView(CreateView):
model = Post
form_class = PostForm
template_name = 'blog/post_form.html'
success_url = '/posts/'
URLs(路由)
python
# myproject/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('myapp.urls')),
]
# myapp/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.PostListView.as_view(), name='post_list'),
path('post/<int:pk>/', views.PostDetailView.as_view(), name='post_detail'),
path('post/new/', views.PostCreateView.as_view(), name='post_create'),
]
Templates(模板)
html
<!-- templates/base.html -->
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}My Blog{% endblock %}</title>
</head>
<body>
<nav>
<a href="{% url 'post_list' %}">Home</a>
</nav>
<main>
{% block content %}
{% endblock %}
</main>
</body>
</html>