django

image

Django 是一个功能强大的 Python Web 框架,适合快速开发和简化复杂的 Web 应用程序。

1. 环境准备

1.1. 安装 Python

首先,你需要安装 Python。

可以从 Python 官网 下载最新版本的 Python 安装包,并按照提示进行安装。

安装完成后,确保 Python 已正确安装,可以在命令行中输入以下命令检查版本:

python --version

1.2. 安装 Django

使用 pip 安装 Django。打开命令行,输入以下命令:

pip install django

安装完成后,可以通过以下命令检查 Django 是否安装成功:

django-admin --version

2. 创建 Django 项目

2.1. 创建项目

使用 django-admin 命令创建一个新的 Django 项目。

例如,我们创建一个名为 myproject 的项目:

django-admin startproject myproject

这将创建一个包含以下文件和目录的项目结构:

myproject/
    manage.py
    myproject/
        __init__.py
        settings.py
        urls.py
        wsgi.py

2.2. 运行开发服务器

进入项目目录并启动开发服务器:

cd myproject
python manage.py runserver

在浏览器中访问 http://127.0.0.1:8000/,如果看到 Django 的欢迎页面,说明项目创建成功。

3. 创建应用

3.1. 创建应用

在 Django 中,应用是一个功能模块。

使用 startapp 命令创建一个新的应用。例如,我们创建一个名为 blog 的应用:

python manage.py startapp blog

这将创建一个包含以下文件和目录的应用结构:

blog/
    __init__.py
    admin.py
    apps.py
    models.py
    tests.py
    views.py

3.2. 注册应用

在 myproject/settings.py 文件中,将新创建的应用添加到 INSTALLED_APPS 列表中:

INSTALLED_APPS = [
    ...
    'blog',
]

4. 定义模型

4.1. 创建模型

在 blog/models.py 文件中定义数据模型。

例如,我们创建一个简单的博客文章模型:

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200, db_index=True)  # 标题字段,最大长度200字符,并添加索引以提高查询速度
    content = models.TextField()  # 内容字段,存储大段文本
    created_at = models.DateTimeField(auto_now_add=True)  # 创建时间字段,自动设置为当前时间

    def __str__(self):
        return self.title  # 返回文章标题作为字符串表示

4.2. 迁移数据库

运行以下命令生成并应用数据库迁移:

python manage.py makemigrations
python manage.py migrate

5. 创建管理界面

5.1. 注册模型

在 blog/admin.py 文件中注册模型,以便在 Django 管理界面中管理它们:

from django.contrib import admin
from .models import Post

admin.site.register(Post)  # 注册 Post 模型

5.2. 创建超级用户

运行以下命令创建一个超级用户:

python manage.py createsuperuser

按照提示输入用户名、邮箱和密码。

5.3. 访问管理界面

启动开发服务器并访问 http://127.0.0.1:8000/admin/,使用刚创建的超级用户登录。

你将看到博客文章模型已经出现在管理界面中。

6. 创建视图和模板

6.1. 创建视图

在 blog/views.py 文件中创建视图函数。

例如,我们创建一个显示所有博客文章的视图:

from django.shortcuts import render
from .models import Post

def post_list(request):
    posts = Post.objects.all()  # 获取所有博客文章
    return render(request, 'blog/post_list.html', {'posts': posts})  # 渲染模板并传递文章数据

6.2. 配置 URL

在 blog/urls.py 文件中配置 URL 模式:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.post_list, name='post_list'),  # 配置根 URL 映射到 post_list 视图
]

在 myproject/urls.py 文件中包含应用的 URL 配置:

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),  # 管理界面 URL
    path('', include('blog.urls')),  # 包含 blog 应用的 URL 配置
]

6.3. 创建模板

在 blog 目录下创建一个名为 templates 的目录,并在其中创建一个名为 blog 的子目录。

在 blog/templates/blog/ 目录中创建一个名为 post_list.html 的模板文件:

<!DOCTYPE html>
<html>
<head>
    <title>Blog</title>
</head>
<body>
    <h1>Blog Posts</h1>
    <ul>
        {% for post in posts %}
            <li>{{ post.title }} - {{ post.created_at }}</li>
        {% endfor %}
    </ul>
</body>
</html>

7. 增加用户注册功能

7.1. 创建用户模型

在 models.py 中定义用户模型:

from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    pass

注:使用自定义用户模型时,需在 settings.py 中设置 AUTH_USER_MODEL = 'blog.CustomUser',并且应在首次执行迁移之前完成,详见 Django 自定义用户模型官方文档。

7.2. 创建用户注册视图

在 views.py 中创建用户注册视图:

from django.shortcuts import render, redirect
from django.contrib.auth.forms import UserCreationForm

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('login')
    else:
        form = UserCreationForm()
    return render(request, 'registration/register.html', {'form': form})

7.3. 配置 URL

在 urls.py 中配置 URL 模式:

from django.urls import path
from . import views

urlpatterns = [
    path('register/', views.register, name='register'),
]

7.4. 创建模板

在 templates/registration/ 目录中创建 register.html 模板:

<!DOCTYPE html>
<html>
<head>
    <title>Register</title>
</head>
<body>
    <h1>Register</h1>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Register</button>
    </form>
</body>
</html>

8. 总结

通过以上步骤,你已经创建了一个简单的 Django 项目,并实现了基本的博客功能和用户注册功能。

你可以继续扩展项目,添加更多功能,如用户登录、评论系统等。

Django 提供了丰富的文档和社区资源,帮助你解决开发过程中遇到的问题。

希望这个详细教程能帮助你更好地掌握 Django。

9. 图表和注释

为了更好地理解 Django 的工作流程,我们可以使用图表进行说明。

9.1. Django 项目结构图

myproject/
├── manage.py
├── myproject/
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── blog/
    ├── __init__.py
    ├── admin.py
    ├── apps.py
    ├── models.py
    ├── tests.py
    └── views.py

9.2. Django 请求处理流程图

用户请求 (HTTP Request)
        |
        v
URL 路由 (urls.py)
        |
        v
视图函数 (views.py)
        |
        v
模型 (models.py) <-> 数据库
        |
        v
模板 (templates)
        |
        v
HTTP 响应 (HTTP Response)

10. 常见问题解答(FAQ)

Q1: 为什么我在运行 python manage.py runserver 时遇到错误?

A1: 请确保你已经在项目目录中运行该命令,并且已经安装了所有必要的依赖项。如果问题仍然存在,请检查错误信息并搜索相关解决方案。

Q2: 如何添加新的应用到我的 Django 项目?

A2: 使用 python manage.py startapp <app_name> 命令创建新的应用,然后在 settings.py 文件中的 INSTALLED_APPS 列表中添加该应用。

11. 练习和项目

11.1. 练习

  1. 创建一个新的 Django 应用,名为 todo,并实现一个简单的待办事项列表功能。
  2. 为博客应用添加评论功能,允许用户在每篇文章下添加评论。