Django入门教程:轻松掌握Python Web开发框架
大家好!今天我要和大家分享的是Django——这个超级强大的Python Web框架!无论你是想做个人网站,还是准备开发企业级应用,Django都能帮你搞定。我用它已经做了好几个项目了,每次都被它的强大功能震撼到。那么,接下来就跟着我一起进入Django的世界吧!
Django是什么?为什么这么受欢迎?
Django是一个用Python编写的高级Web框架,它鼓励快速开发和简洁实用的设计。简单来说,Django就像是一个工具箱,里面有各种各样帮你快速构建网站的工具。
为什么Django这么受欢迎呢?我总结了以下几点:
- 全栈框架 - 前端后端一把抓,不用东拼西凑各种库
- 自带Admin后台 - 这可是杀手锏!几乎不用写代码就能管理你的数据
- ORM系统 - 告别繁琐的SQL语句,用Python代码就能操作数据库
- 安全性高 - 自动防御常见的网络攻击(SQL注入、CSRF等)
- 可扩展性强 - 从小型博客到大型电商平台,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开发的基本流程:
- 设计模型:定义数据结构
- 创建迁移:生成数据库表
- 注册Admin:使用后台管理数据
- 编写视图:处理请求逻辑
- 设置URL:定义URL路由
- 创建模板:渲染HTML页面
- 处理表单:接收用户输入
Django的设计理念是"电池已包含",它提供了Web开发所需的几乎所有功能。当然,这只是Django的冰山一角,还有很多强大的功能等待我们探索,比如:
- 认证系统:用户注册、登录、权限管理
- 缓存框架:提高性能
- 表单处理:验证和处理用户输入
- 安全特性:防御常见的Web攻击
- 国际化:多语言支持
下一步学习
如果你想进一步学习Django,我推荐以下几个方向:
- 深入学习ORM:了解复杂查询、事务等
- 学习Class-based Views:更强大的视图实现方式
- 探索Django REST framework:构建API服务
- 学习测试:编写单元测试和集成测试
- 了解部署:将Django应用部署到生产环境
Django是一个非常成熟的框架,社区活跃,文档丰富。通过不断实践和学习,你会发现它的强大之处。希望这篇教程能帮助你入门Django!祝你编程愉快!
记住:编程是一项需要不断实践的技能。不要只看教程,动手写代码才是最好的学习方式。遇到问题别怕,查文档、Google、Stack Overflow都是好帮手。
Django的口号是"Web框架,完美主义者",但完美的代码并不存在,重要的是不断改进和学习。就像Django之父Adrian Holovaty说的:"Django让你专注于独特的应用,而不是重复发明轮子。"
加油,你已经迈出了学习Django的第一步!