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应用。
- DDeepSeek-V3.1-BaseDeepSeek-V3.1 是一款支持思考模式与非思考模式的混合模型Python00
- QQwen-Image-Edit基于200亿参数Qwen-Image构建,Qwen-Image-Edit实现精准文本渲染与图像编辑,融合语义与外观控制能力Jinja00
GitCode-文心大模型-智源研究院AI应用开发大赛
GitCode&文心大模型&智源研究院强强联合,发起的AI应用开发大赛;总奖池8W,单人最高可得价值3W奖励。快来参加吧~053CommonUtilLibrary
快速开发工具类收集,史上最全的开发工具类,欢迎Follow、Fork、StarJava04GitCode百大开源项目
GitCode百大计划旨在表彰GitCode平台上积极推动项目社区化,拥有广泛影响力的G-Star项目,入选项目不仅代表了GitCode开源生态的蓬勃发展,也反映了当下开源行业的发展趋势。07GOT-OCR-2.0-hf
阶跃星辰StepFun推出的GOT-OCR-2.0-hf是一款强大的多语言OCR开源模型,支持从普通文档到复杂场景的文字识别。它能精准处理表格、图表、数学公式、几何图形甚至乐谱等特殊内容,输出结果可通过第三方工具渲染成多种格式。模型支持1024×1024高分辨率输入,具备多页批量处理、动态分块识别和交互式区域选择等创新功能,用户可通过坐标或颜色指定识别区域。基于Apache 2.0协议开源,提供Hugging Face演示和完整代码,适用于学术研究到工业应用的广泛场景,为OCR领域带来突破性解决方案。00openHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!C0377- WWan2.2-S2V-14B【Wan2.2 全新发布|更强画质,更快生成】新一代视频生成模型 Wan2.2,创新采用MoE架构,实现电影级美学与复杂运动控制,支持720P高清文本/图像生成视频,消费级显卡即可流畅运行,性能达业界领先水平Python00
- GGLM-4.5-AirGLM-4.5 系列模型是专为智能体设计的基础模型。GLM-4.5拥有 3550 亿总参数量,其中 320 亿活跃参数;GLM-4.5-Air采用更紧凑的设计,拥有 1060 亿总参数量,其中 120 亿活跃参数。GLM-4.5模型统一了推理、编码和智能体能力,以满足智能体应用的复杂需求Jinja00
Yi-Coder
Yi Coder 编程模型,小而强大的编程助手HTML013
热门内容推荐
最新内容推荐
项目优选









