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应用。
AutoGLM-Phone-9BAutoGLM-Phone-9B是基于AutoGLM构建的移动智能助手框架,依托多模态感知理解手机屏幕并执行自动化操作。Jinja00
Kimi-K2-ThinkingKimi K2 Thinking 是最新、性能最强的开源思维模型。从 Kimi K2 开始,我们将其打造为能够逐步推理并动态调用工具的思维智能体。通过显著提升多步推理深度,并在 200–300 次连续调用中保持稳定的工具使用能力,它在 Humanity's Last Exam (HLE)、BrowseComp 等基准测试中树立了新的技术标杆。同时,K2 Thinking 是原生 INT4 量化模型,具备 256k 上下文窗口,实现了推理延迟和 GPU 内存占用的无损降低。Python00
GLM-4.6V-FP8GLM-4.6V-FP8是GLM-V系列开源模型,支持128K上下文窗口,融合原生多模态函数调用能力,实现从视觉感知到执行的闭环。具备文档理解、图文生成、前端重构等功能,适用于云集群与本地部署,在同类参数规模中视觉理解性能领先。Jinja00
HunyuanOCRHunyuanOCR 是基于混元原生多模态架构打造的领先端到端 OCR 专家级视觉语言模型。它采用仅 10 亿参数的轻量化设计,在业界多项基准测试中取得了当前最佳性能。该模型不仅精通复杂多语言文档解析,还在文本检测与识别、开放域信息抽取、视频字幕提取及图片翻译等实际应用场景中表现卓越。00
GLM-ASR-Nano-2512GLM-ASR-Nano-2512 是一款稳健的开源语音识别模型,参数规模为 15 亿。该模型专为应对真实场景的复杂性而设计,在保持紧凑体量的同时,多项基准测试表现优于 OpenAI Whisper V3。Python00
GLM-TTSGLM-TTS 是一款基于大语言模型的高质量文本转语音(TTS)合成系统,支持零样本语音克隆和流式推理。该系统采用两阶段架构,结合了用于语音 token 生成的大语言模型(LLM)和用于波形合成的流匹配(Flow Matching)模型。 通过引入多奖励强化学习框架,GLM-TTS 显著提升了合成语音的表现力,相比传统 TTS 系统实现了更自然的情感控制。Python00
Spark-Formalizer-X1-7BSpark-Formalizer 是由科大讯飞团队开发的专用大型语言模型,专注于数学自动形式化任务。该模型擅长将自然语言数学问题转化为精确的 Lean4 形式化语句,在形式化语句生成方面达到了业界领先水平。Python00