GitHub Django 教程:从入门到实践 – wiki大全

Here’s an article detailing a GitHub Django tutorial, from beginner to practical application:

GitHub Django 教程:从入门到实践

Django 是一个高级 Python Web 框架,鼓励快速开发和干净、实用的设计。它由经验丰富的开发者构建,解决了 Web 开发中许多繁琐的方面,因此您可以专注于编写应用程序,而无需重新发明轮子。本教程将引导您从零开始学习 Django,并结合 GitHub 进行版本控制,最终构建一个实用的 Web 应用。

教程目标

  • 理解 Django 的基本概念和工作原理。
  • 掌握 Django 项目的创建、应用管理和核心组件 (MVT)。
  • 学会使用 Git 和 GitHub 对 Django 项目进行版本控制。
  • 通过一个简单的实践项目,将所学知识付诸实践。

第一部分:Django 入门

1.1 环境准备

在开始之前,请确保您的系统已安装 Python 和 pip。建议使用 virtualenvconda 创建一个独立的 Python 环境,以避免包冲突。

“`bash

创建虚拟环境 (使用 virtualenv)

python -m venv myenv

激活虚拟环境

Windows:

.\myenv\Scripts\activate

macOS/Linux:

source myenv/bin/activate

安装 Django

pip install Django
“`

1.2 创建第一个 Django 项目

激活虚拟环境后,使用 django-admin 命令创建一个新的项目。

bash
django-admin startproject myproject .

这里的 myproject 是您的项目名称,. 表示在当前目录下创建项目结构。

项目结构概览:

myproject/
├── manage.py
├── myproject/
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py # 项目配置
│ ├── urls.py # 项目 URL 路由
│ └── wsgi.py
└── ... (其他文件)

运行开发服务器:

bash
python manage.py runserver

在浏览器中访问 http://127.0.0.1:8000/,您应该能看到 Django 的欢迎页面。

1.3 创建第一个 Django 应用

Django 的核心思想是将功能模块化为“应用”(App)。一个项目可以包含多个应用。

bash
python manage.py startapp myapp

这将创建一个名为 myapp 的目录,其中包含应用特定的文件。

myapp/
├── migrations/
│ └── __init__.py
├── __init__.py
├── admin.py # 配置管理后台
├── apps.py # 应用配置
├── models.py # 定义数据模型
├── tests.py # 编写测试
├── views.py # 编写视图逻辑
└── ...

将应用注册到项目:编辑 myproject/settings.py,在 INSTALLED_APPS 列表中添加您的应用。

“`python

myproject/settings.py

INSTALLED_APPS = [
‘django.contrib.admin’,
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’,
‘myapp’, # 添加您的应用
]
“`

1.4 模型 (Models)、视图 (Views) 和模板 (Templates) – MVT

Django 遵循 MVT (Model-View-Template) 架构模式。

  • Model(模型):定义应用程序的数据结构,并提供与数据库交互的接口。
  • View(视图):接收 Web 请求,从模型获取数据,处理业务逻辑,并决定返回什么响应。
  • Template(模板):定义数据的展示方式,通常是 HTML。

1.4.1 定义模型

编辑 myapp/models.py

“`python

myapp/models.py

from django.db import models

class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
pub_date = models.DateTimeField(‘date published’)

def __str__(self):
    return self.title

“`

执行数据库迁移:当您修改模型时,需要让 Django 创建或更新数据库表。

bash
python manage.py makemigrations myapp
python manage.py migrate

1.4.2 创建超级用户并访问管理后台

Django 提供了一个强大的管理后台。

bash
python manage.py createsuperuser

按照提示输入用户名、邮箱和密码。
再次运行 python manage.py runserver,访问 http://127.0.0.1:8000/admin/,使用您创建的超级用户登录。

注册模型到管理后台:编辑 myapp/admin.py,让您的 Post 模型出现在管理后台。

“`python

myapp/admin.py

from django.contrib import admin
from .models import Post

admin.site.register(Post)
“`

现在,您可以在管理后台中添加、编辑和删除 Post 对象了。

1.4.3 编写视图

编辑 myapp/views.py

“`python

myapp/views.py

from django.shortcuts import render
from .models import Post

def post_list(request):
posts = Post.objects.order_by(‘-pub_date’)
return render(request, ‘myapp/post_list.html’, {‘posts’: posts})
“`

1.4.4 配置 URL 路由

为了让用户访问到您的视图,需要配置 URL。
首先,在 myapp 目录下创建 urls.py 文件:

“`python

myapp/urls.py

from django.urls import path
from . import views

app_name = ‘myapp’ # 为应用命名空间
urlpatterns = [
path(”, views.post_list, name=’post_list’),
]
“`

然后,在项目根 myproject/urls.py 中引入应用的 URL:

“`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’)), # 引入您的应用 URL
]
“`

现在,访问 http://127.0.0.1:8000/blog/ 应该会触发 post_list 视图。

1.4.5 创建模板

myapp 目录下创建 templates/myapp/post_list.html 文件:

“`html





我的博客

最新文章

{% if posts %}

    {% for post in posts %}

  • {{ post.title }}

    {{ post.content|truncatechars:100 }}

    发布日期: {{ post.pub_date }}

  • {% endfor %}

{% else %}

还没有发布任何文章。

{% endif %}

“`

重新运行服务器,访问 http://127.0.0.1:8000/blog/,您应该能看到从数据库中取出的文章列表。

第二部分:GitHub 集成

版本控制是软件开发不可或缺的一部分。GitHub 是最流行的基于 Git 的代码托管平台。

2.1 初始化 Git 仓库

在您的项目根目录 (即 manage.py 所在的目录) 初始化 Git 仓库。

bash
git init

2.2 创建 .gitignore 文件

有些文件和目录不应该被版本控制,例如虚拟环境、数据库文件 (db.sqlite3)、编译后的 Python 文件 (.pyc) 和敏感配置。创建一个 .gitignore 文件:

“`bash

.gitignore

Byte-compiled / optimized / DLL files

pycache/
.pyc
.pyd
.pyo
.egg-info/
.pytest_cache/

Environments

.env
venv/
env/
myenv/ # 您的虚拟环境目录

Django stuff:

*.log
local_settings.py
db.sqlite3
/media
/static

IDE-specific files

.idea/
.vscode/
“`

2.3 首次提交

将所有文件添加到暂存区并提交。

bash
git add .
git commit -m "Initial Django project setup"

2.4 连接 GitHub 仓库

在 GitHub 上创建一个新的空仓库(不要初始化 README 或 .gitignore)。假设您的仓库名为 django-tutorial

将本地仓库连接到远程 GitHub 仓库:

bash
git remote add origin https://github.com/YourGitHubUsername/django-tutorial.git
git branch -M main # 将默认分支命名为 main
git push -u origin main

替换 YourGitHubUsername 为您的 GitHub 用户名。现在,您的代码已成功上传到 GitHub。

2.5 分支管理 (可选)

在实际开发中,您通常会在不同的分支上工作,例如 feature 分支用于新功能,bugfix 分支用于修复 bug。

“`bash

创建并切换到新分支

git checkout -b new-feature

在新分支上进行修改…

提交更改

git add .
git commit -m “Implement new feature X”

推送到 GitHub

git push -u origin new-feature

合并回主分支 (当功能开发完成后)

git checkout main
git merge new-feature
git push origin main
“`

第三部分:从入门到实践 (一个简单的待办事项应用)

让我们通过构建一个简单的待办事项列表应用来巩固所学。

3.1 规划待办事项应用

  • 模型: TodoItem (任务标题、描述、创建日期、是否完成)。
  • 视图:
    • 显示所有待办事项。
    • 添加新待办事项。
    • 将待办事项标记为完成。
    • 删除待办事项。
  • 模板: 列表页面、添加页面。

3.2 创建 Todo 应用

bash
python manage.py startapp todo

别忘了在 myproject/settings.pyINSTALLED_APPS 中添加 'todo'

3.3 定义 TodoItem 模型

编辑 todo/models.py

“`python

todo/models.py

from django.db import models

class TodoItem(models.Model):
title = models.CharField(max_length=200)
description = models.TextField(blank=True, null=True)
created_at = models.DateTimeField(auto_now_add=True)
completed = models.BooleanField(default=False)

class Meta:
    ordering = ['-created_at'] # 按创建时间倒序排序

def __str__(self):
    return self.title

“`

执行迁移:

bash
python manage.py makemigrations todo
python manage.py migrate

注册到管理后台 todo/admin.py

“`python

todo/admin.py

from django.contrib import admin
from .models import TodoItem

admin.site.register(TodoItem)
“`

3.4 编写视图和 URL

编辑 todo/views.py

“`python

todo/views.py

from django.shortcuts import render, redirect, get_object_or_404
from .models import TodoItem
from .forms import TodoItemForm # 稍后创建

def todo_list(request):
todos = TodoItem.objects.all()
return render(request, ‘todo/todo_list.html’, {‘todos’: todos})

def add_todo(request):
if request.method == ‘POST’:
form = TodoItemForm(request.POST)
if form.is_valid():
form.save()
return redirect(‘todo:todo_list’)
else:
form = TodoItemForm()
return render(request, ‘todo/add_todo.html’, {‘form’: form})

def toggle_complete(request, todo_id):
todo = get_object_or_404(TodoItem, pk=todo_id)
todo.completed = not todo.completed
todo.save()
return redirect(‘todo:todo_list’)

def delete_todo(request, todo_id):
todo = get_object_or_404(TodoItem, pk=todo_id)
todo.delete()
return redirect(‘todo:todo_list’)
“`

创建 todo/urls.py

“`python

todo/urls.py

from django.urls import path
from . import views

app_name = ‘todo’
urlpatterns = [
path(”, views.todo_list, name=’todo_list’),
path(‘add/’, views.add_todo, name=’add_todo’),
path(‘toggle//’, views.toggle_complete, name=’toggle_complete’),
path(‘delete//’, views.delete_todo, name=’delete_todo’),
]
“`

todo 应用的 URL 包含到项目 myproject/urls.py 中:

“`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’)),
path(‘todos/’, include(‘todo.urls’)), # 添加待办事项应用
]
“`

3.5 创建表单

为了更方便地处理用户输入,Django 提供了表单 (Forms)。
创建 todo/forms.py

“`python

todo/forms.py

from django import forms
from .models import TodoItem

class TodoItemForm(forms.ModelForm):
class Meta:
model = TodoItem
fields = [‘title’, ‘description’] # 用户可以输入的字段
“`

3.6 创建模板

todo 目录下创建 templates/todo/ 文件夹。

todo/templates/todo/todo_list.html

“`html





待办事项


我的待办事项

添加新事项


“`

todo/templates/todo/add_todo.html

“`html





添加待办事项

添加新待办事项

{% csrf_token %}
{{ form.as_p }}

返回列表

“`

现在,运行 python manage.py runserver,访问 http://127.0.0.1:8000/todos/,您就可以看到并交互您的待办事项应用了!

3.7 提交更改到 GitHub

完成待办事项应用后,不要忘记提交您的代码:

bash
git add .
git commit -m "Implement Todo app"
git push origin main

部署注意事项 (简述)

当您的 Django 应用在本地运行良好时,下一步通常是部署到生产环境。常见的部署选项包括:

  • Heroku: 简单易用的 PaaS (Platform as a Service),适合快速部署。
  • Vercel/Netlify: 主要用于前端,但也可以与 Django 后端分离部署,或者用于静态站点。
  • 云服务提供商 (AWS EC2, Google Cloud, Azure): 提供更多控制权,但需要更多配置。
  • 自托管 (VPS): 使用 Nginx/Apache + Gunicorn/uWSGI + PostgreSQL/MySQL。

无论选择哪种方式,都需要考虑以下几点:

  1. 数据库: 生产环境通常使用 PostgreSQL 或 MySQL,而不是 SQLite。
  2. 静态文件和媒体文件: 需要单独配置服务(如 AWS S3 或 Nginx)来提供。
  3. 环境变量: 敏感信息(如 SECRET_KEY、数据库凭据)应通过环境变量管理,而不是硬编码在 settings.py 中。
  4. DEBUG = False: 生产环境中必须关闭调试模式。
  5. 安全性: 配置 HTTPS、处理 CSRF 和 XSS 攻击。

总结

本教程从 Django 的基础概念和项目搭建开始,逐步深入到模型、视图、模板的核心工作流程,并通过一个简单的博客和一个待办事项应用将这些概念付诸实践。同时,我们强调了使用 Git 和 GitHub 进行版本控制的重要性,这对于任何规模的软件项目都是必不可少的。

通过这个教程,您应该对 Django 和 GitHub 有了初步的理解和实践经验。Web 开发之旅才刚刚开始,探索更多 Django 的高级特性(如认证系统、表单验证、REST API 开发)和前端技术(如 JavaScript 框架),将使您成为一名更全面的开发者。

滚动至顶部