Django入门教程:从零开始构建Web应用
Django作为Python生态中最流行的Web框架之一,以其"开箱即用"的特性深受开发者喜爱。本文将通过一个实际项目案例,带你从零开始学习Django的核心概念和开发流程。
环境准备与项目创建
在开始Django项目前,我们需要确保Python环境已正确配置。推荐使用虚拟环境隔离项目依赖:
# 创建虚拟环境
python -m venv myenv
source myenv/bin/activate
# 安装Django
pip install django==1.10.2
创建Django项目的基本命令非常简单:
django-admin startproject mysite
这会在当前目录下生成一个名为mysite的项目目录,包含以下核心文件:
mysite/
├── manage.py # 项目管理脚本
└── mysite # 项目主目录
├── __init__.py
├── settings.py # 项目配置
├── urls.py # URL路由配置
└── wsgi.py # WSGI应用入口
启动开发服务器:
python manage.py runserver 0.0.0.0:8000
创建第一个Django应用
在Django中,一个项目(project)可以包含多个应用(app)。让我们创建一个名为polls的应用:
python manage.py startapp polls
创建完成后,需要在项目的settings.py中注册这个应用:
INSTALLED_APPS = [
'polls.apps.PollsConfig',
# 其他默认应用...
]
模型(Model)设计
Django的模型层(Model)负责与数据库交互。我们以新闻网站为例,创建记者(Reporter)和文章(Article)两个模型:
# polls/models.py
from django.db import models
class Reporter(models.Model):
full_name = models.CharField(max_length=70)
def __str__(self):
return self.full_name
class Article(models.Model):
pub_date = models.DateField()
headline = models.CharField(max_length=200)
content = models.TextField()
reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)
def __str__(self):
return self.headline
创建模型迁移文件并同步到数据库:
python manage.py makemigrations polls
python manage.py migrate
Django Shell操作
Django提供了交互式shell,方便我们测试模型操作:
python manage.py shell
在shell中可以执行各种数据库操作:
from polls.models import Reporter, Article
from django.utils import timezone
# 创建记者
r = Reporter(full_name="张三")
r.save()
# 创建文章
a = Article(
pub_date=timezone.now(),
headline="Django入门教程",
content="这是一篇关于Django入门的教程...",
reporter=r
)
a.save()
# 查询操作
Reporter.objects.all()
Article.objects.filter(headline__startswith="Django")
管理后台配置
Django自带功能强大的管理后台,首先创建超级用户:
python manage.py createsuperuser
然后注册模型到admin界面:
# polls/admin.py
from django.contrib import admin
from .models import Reporter, Article
admin.site.register(Reporter)
admin.site.register(Article)
访问http://localhost:8000/admin即可看到管理后台界面。
视图(View)与URL配置
视图负责处理业务逻辑,URL配置决定哪个请求由哪个视图处理。
首先配置项目的主URL:
# mysite/urls.py
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^polls/', include('polls.urls')),
]
然后在应用(polls)中创建URL配置:
# polls/urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^(?P<article_id>[0-9]+)/$', views.detail, name='detail'),
]
对应的视图函数:
# polls/views.py
from django.shortcuts import render, get_object_or_404
from .models import Article
def index(request):
latest_articles = Article.objects.order_by('-pub_date')[:5]
context = {'latest_articles': latest_articles}
return render(request, 'polls/index.html', context)
def detail(request, article_id):
article = get_object_or_404(Article, pk=article_id)
return render(request, 'polls/detail.html', {'article': article})
模板(Template)系统
Django使用模板系统分离业务逻辑和展示逻辑。首先在项目设置中配置模板路径:
# mysite/settings.py
TEMPLATES = [
{
'DIRS': [os.path.join(BASE_DIR, 'templates')],
# 其他配置...
},
]
创建基础模板:
<!-- templates/base.html -->
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}My Site{% endblock %}</title>
</head>
<body>
<div id="content">
{% block content %}{% endblock %}
</div>
</body>
</html>
创建文章列表模板:
<!-- templates/polls/index.html -->
{% extends "base.html" %}
{% block title %}最新文章{% endblock %}
{% block content %}
{% if latest_articles %}
<ul>
{% for article in latest_articles %}
<li>
<a href="{% url 'polls:detail' article.id %}">
{{ article.headline }}
</a>
</li>
{% endfor %}
</ul>
{% else %}
<p>暂无文章</p>
{% endif %}
{% endblock %}
Django工作流程总结
- 请求到达:用户访问URL,Django根据URL配置找到对应的视图函数
- 业务处理:视图函数处理请求,可能需要查询数据库
- 模板渲染:视图将数据传递给模板进行渲染
- 响应返回:渲染后的HTML作为响应返回给用户
这种模式被称为MTV模式(Model-Template-View),是Django的核心设计理念。
进阶功能
表单处理
Django提供了强大的表单处理功能:
# polls/forms.py
from django import forms
from .models import Article
class ArticleForm(forms.ModelForm):
class Meta:
model = Article
fields = ['headline', 'content', 'reporter']
静态文件管理
在settings.py中配置静态文件:
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
用户认证
Django内置了完整的用户认证系统:
from django.contrib.auth import authenticate, login
def my_view(request):
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
# 登录成功...
常见问题解决
- 数据库连接问题:确保已安装数据库驱动(sqlite3, psycopg2等)
- 时区设置:在
settings.py中正确配置TIME_ZONE - 静态文件404:开发时需配置
STATICFILES_DIRS,生产环境需配置Web服务器
通过本教程,你应该已经掌握了Django的基础开发流程。Django的强大之处在于其"电池全包"的理念,几乎所有的Web开发需求都能找到对应的解决方案。继续深入探索Django的各个组件,你将能够构建更加复杂的Web应用。
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
请把这个活动推给顶尖程序员😎本次活动专为懂行的顶尖程序员量身打造,聚焦AtomGit首发开源模型的实际应用与深度测评,拒绝大众化浅层体验,邀请具备扎实技术功底、开源经验或模型测评能力的顶尖开发者,深度参与模型体验、性能测评,通过发布技术帖子、提交测评报告、上传实践项目成果等形式,挖掘模型核心价值,共建AtomGit开源模型生态,彰显顶尖程序员的技术洞察力与实践能力。00
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
MiniMax-M2.5MiniMax-M2.5开源模型,经数十万复杂环境强化训练,在代码生成、工具调用、办公自动化等经济价值任务中表现卓越。SWE-Bench Verified得分80.2%,Multi-SWE-Bench达51.3%,BrowseComp获76.3%。推理速度比M2.1快37%,与Claude Opus 4.6相当,每小时仅需0.3-1美元,成本仅为同类模型1/10-1/20,为智能应用开发提供高效经济选择。【此简介由AI生成】Python00
Qwen3.5Qwen3.5 昇腾 vLLM 部署教程。Qwen3.5 是 Qwen 系列最新的旗舰多模态模型,采用 MoE(混合专家)架构,在保持强大模型能力的同时显著降低了推理成本。00- RRing-2.5-1TRing-2.5-1T:全球首个基于混合线性注意力架构的开源万亿参数思考模型。Python00