Django入门教程:轻松掌握Python Web开发框架

大家好!今天我要和大家分享的是Django——这个超级强大的Python Web框架!无论你是想做个人网站,还是准备开发企业级应用,Django都能帮你搞定。我用它已经做了好几个项目了,每次都被它的强大功能震撼到。那么,接下来就跟着我一起进入Django的世界吧!

Django是什么?为什么这么受欢迎?

Django是一个用Python编写的高级Web框架,它鼓励快速开发和简洁实用的设计。简单来说,Django就像是一个工具箱,里面有各种各样帮你快速构建网站的工具。

为什么Django这么受欢迎呢?我总结了以下几点:

  1. 全栈框架 - 前端后端一把抓,不用东拼西凑各种库
  2. 自带Admin后台 - 这可是杀手锏!几乎不用写代码就能管理你的数据
  3. ORM系统 - 告别繁琐的SQL语句,用Python代码就能操作数据库
  4. 安全性高 - 自动防御常见的网络攻击(SQL注入、CSRF等)
  5. 可扩展性强 - 从小型博客到大型电商平台,Django都能胜任

Django的设计理念是"Don't Repeat Yourself"(不要重复自己),通过重用组件,你能够快速开发出应用。

开始使用Django(环境准备)

在开始之前,我们需要准备好环境。确保你已经安装了Python(建议使用3.8或更高版本)。

安装Django

使用pip安装Django超级简单:

pip install django

安装完成后,你可以通过以下命令验证安装是否成功:

python -m django --version

如果显示版本号(比如4.2.0),那就说明安装成功了!

创建你的第一个Django项目

接下来,我们来创建第一个Django项目。在命令行中输入:

django-admin startproject mysite

这个命令会创建一个名为"mysite"的文件夹,包含以下文件:

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py

这些文件各自有什么作用呢?

  • manage.py:一个命令行工具,帮你管理Django项目
  • settings.py:项目配置文件,包含数据库配置、中间件等
  • urls.py:URL声明,相当于网站的"目录"
  • wsgi.py/asgi.py:Web服务器网关接口,用于部署

运行开发服务器

现在,进入项目目录,运行开发服务器:

cd mysite
python manage.py runserver

访问http://127.0.0.1:8000/,如果看到Django的欢迎页面,恭喜你,第一步成功了!(这一刻的成就感真不错!)

Django项目结构:掌握MVT模式

Django使用MVT(Model-View-Template)架构模式,这和MVC(Model-View-Controller)有些类似,但更适合Web开发。

  • Model(模型):定义数据结构,负责数据库交互
  • View(视图):处理业务逻辑,决定显示什么数据
  • Template(模板):负责HTML渲染,决定如何显示数据

理解这个模式对学习Django至关重要!

创建应用

在Django中,一个项目可以包含多个应用。应用是一个功能模块,比如博客、用户管理等。创建一个名为"polls"的应用:

python manage.py startapp polls

这会创建polls目录,包含以下文件:

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
    models.py
    tests.py
    views.py

每个文件的作用也很直观:

  • models.py:定义数据模型
  • views.py:处理请求和响应
  • admin.py:后台管理配置
  • migrations/:数据库变更记录

创建模型:设计数据库

接下来,我们在polls应用中定义两个模型:Question和Choice。编辑polls/models.py:

from django.db import models

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('发布日期')
    
    def __str__(self):
        return self.question_text

class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)
    
    def __str__(self):
        return self.choice_text

这段代码定义了两个模型:Question(问题)和Choice(选项)。一个问题可以有多个选项,所以使用ForeignKey建立了一对多的关系。

激活模型

要使用这些模型,我们需要告诉Django这个应用已经安装。编辑mysite/settings.py,在INSTALLED_APPS中添加'polls.apps.PollsConfig':

INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    # ...其他应用...
]

然后,运行以下命令生成迁移文件:

python manage.py makemigrations polls

这个命令会告诉Django,我们对模型做了变更。迁移文件记录了这些变更,以便应用到数据库。

接着,应用这些变更:

python manage.py migrate

就这样,数据库表已经创建好了!Django的ORM帮我们省去了写SQL的麻烦。(真的很方便!)

Django Admin:强大的后台管理

Django自带一个强大的后台管理界面,几乎不用写代码就能管理你的数据。

创建超级用户

首先,创建一个管理员账号:

python manage.py createsuperuser

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

注册模型

编辑polls/admin.py,注册我们的模型:

from django.contrib import admin
from .models import Question, Choice

admin.site.register(Question)
admin.site.register(Choice)

现在,访问http://127.0.0.1:8000/admin/,使用刚才创建的账号登录。你会看到一个漂亮的管理界面,可以添加、修改、删除问题和选项。(这个功能实在太赞了!省去了我们手动编写管理界面的时间)

创建视图:处理请求

视图是Django的核心,负责处理Web请求并返回响应。编辑polls/views.py:

from django.http import HttpResponse
from .models import Question

def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    output = ', '.join([q.question_text for q in latest_question_list])
    return HttpResponse(output)

def detail(request, question_id):
    return HttpResponse(f"你正在查看问题 {question_id}。")

def results(request, question_id):
    return HttpResponse(f"问题 {question_id} 的结果。")

def vote(request, question_id):
    return HttpResponse(f"你正在对问题 {question_id} 投票。")

这里我们定义了四个视图函数:

  • index:显示最新的5个问题
  • detail:显示某个问题的详细信息
  • results:显示某个问题的投票结果
  • vote:处理对某个问题的投票

设置URL

现在,我们需要把这些视图函数映射到URL。首先,创建polls/urls.py:

from django.urls import path
from . import views

app_name = 'polls'
urlpatterns = [
    path('', views.index, name='index'),
    path('<int:question_id>/', views.detail, name='detail'),
    path('<int:question_id>/results/', views.results, name='results'),
    path('<int:question_id>/vote/', views.vote, name='vote'),
]

然后,编辑mysite/urls.py,包含polls的URL配置:

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

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

现在,访问http://127.0.0.1:8000/polls/,你应该能看到问题列表。

模板:渲染HTML页面

直接返回HttpResponse不太美观,我们可以使用模板来渲染HTML页面。首先,创建polls/templates/polls/index.html:

{% if latest_question_list %}
    <ul>
    {% for question in latest_question_list %}
        <li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>没有可用的投票。</p>
{% endif %}

然后,修改polls/views.py中的index视图:

from django.shortcuts import render
from .models import Question

def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    context = {'latest_question_list': latest_question_list}
    return render(request, 'polls/index.html', context)

render函数接收三个参数:请求对象、模板路径和上下文字典。它会使用给定的上下文渲染模板,并返回HttpResponse对象。

同样,我们可以为detail、results和vote视图创建模板。这里我就不一一展示了,原理是一样的。

表单处理:用户输入

最后,让我们完成投票功能。首先,修改polls/templates/polls/detail.html:

<h1>{{ question.question_text }}</h1>

{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}

<form action="{% url 'polls:vote' question.id %}" method="post">
{% csrf_token %}
{% for choice in question.choice_set.all %}
    <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}">
    <label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br>
{% endfor %}
<input type="submit" value="投票">
</form>

然后,修改polls/views.py中的vote视图:

from django.shortcuts import get_object_or_404, render
from django.http import HttpResponseRedirect
from django.urls import reverse
from .models import Choice, Question

def vote(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    try:
        selected_choice = question.choice_set.get(pk=request.POST['choice'])
    except (KeyError, Choice.DoesNotExist):
        # 重新显示问题表单
        return render(request, 'polls/detail.html', {
            'question': question,
            'error_message': "你没有选择选项。",
        })
    else:
        selected_choice.votes += 1
        selected_choice.save()
        # 重定向到结果页面
        return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))

这个视图函数处理表单提交,增加所选选项的票数,并重定向到结果页面。

总结:Django开发的流程

通过这个简单的投票应用,我们了解了Django开发的基本流程:

  1. 设计模型:定义数据结构
  2. 创建迁移:生成数据库表
  3. 注册Admin:使用后台管理数据
  4. 编写视图:处理请求逻辑
  5. 设置URL:定义URL路由
  6. 创建模板:渲染HTML页面
  7. 处理表单:接收用户输入

Django的设计理念是"电池已包含",它提供了Web开发所需的几乎所有功能。当然,这只是Django的冰山一角,还有很多强大的功能等待我们探索,比如:

  • 认证系统:用户注册、登录、权限管理
  • 缓存框架:提高性能
  • 表单处理:验证和处理用户输入
  • 安全特性:防御常见的Web攻击
  • 国际化:多语言支持

下一步学习

如果你想进一步学习Django,我推荐以下几个方向:

  1. 深入学习ORM:了解复杂查询、事务等
  2. 学习Class-based Views:更强大的视图实现方式
  3. 探索Django REST framework:构建API服务
  4. 学习测试:编写单元测试和集成测试
  5. 了解部署:将Django应用部署到生产环境

Django是一个非常成熟的框架,社区活跃,文档丰富。通过不断实践和学习,你会发现它的强大之处。希望这篇教程能帮助你入门Django!祝你编程愉快!

记住:编程是一项需要不断实践的技能。不要只看教程,动手写代码才是最好的学习方式。遇到问题别怕,查文档、Google、Stack Overflow都是好帮手。

Django的口号是"Web框架,完美主义者",但完美的代码并不存在,重要的是不断改进和学习。就像Django之父Adrian Holovaty说的:"Django让你专注于独特的应用,而不是重复发明轮子。"

加油,你已经迈出了学习Django的第一步!

posted @ 2025-09-17 20:15  embedded19  阅读(10)  评论(0)    收藏  举报