Python Django 框架使用指南: #
1. Django 简介 #
Django是一个高级Python Web框架,它鼓励快速开发和简洁实用的设计。由经验丰富的开发人员构建,它解决了Web开发中许多常见问题,让您可以专注于编写应用程序,而无需重新发明轮子。
Django 的主要特点 #
- 快速开发:Django的设计理念是让开发者能够快速将想法转化为产品
- 安全可靠:Django内置了防御常见安全问题的机制,如SQL注入、跨站脚本(XSS)、跨站请求伪造(CSRF)等
- 可扩展性:Django的模块化设计使其易于扩展
- MTV架构:采用模型(Model)-模板(Template)-视图(View)的架构模式
- ORM支持:内置对象关系映射(ORM),支持多种数据库
- 管理后台:自动生成的管理界面,方便内容管理
- 国际化支持:内置对多语言和时区的支持
2. Django 安装 #
2.1 系统要求 #
- Python 3.8 或更高版本
- pip 包管理器
- 可选:虚拟环境(推荐)
2.2 安装步骤 #
步骤 1: 创建虚拟环境(推荐) #
bash
# 使用 venv 创建虚拟环境
python3 -m venv myenv
# 激活虚拟环境
# macOS/Linux
source myenv/bin/activate
# Windows
myenv\Scripts\activate
步骤 2: 安装 Django #
bash
pip install django
步骤 3: 验证安装 #
bash
django-admin --version
3. Django 项目结构 #
3.1 创建新项目 #
bash
django-admin startproject myproject
3.2 项目目录结构 #
text
myproject/
├── manage.py # Django项目管理工具
└── myproject/ # 项目主目录
├── __init__.py # Python包初始化文件
├── settings.py # 项目配置文件
├── urls.py # URL路由配置
└── wsgi.py # WSGI接口配置(用于部署)
3.3 启动开发服务器 #
bash
cd myproject
python manage.py runserver
访问 http://127.0.0.1:8000/ 即可看到Django的欢迎页面。
4. Django 核心概念 #
4.1 模型(Model) #
模型是数据的单一、确定的信息来源,包含了所存储数据的字段和行为。Django使用ORM将模型映射到数据库表。
创建模型 #
python
# myapp/models.py
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
pub_date = models.DateTimeField('date published')
author = models.CharField(max_length=100)
def __str__(self):
return self.title
数据库迁移 #
bash
python manage.py makemigrations
python manage.py migrate
4.2 视图(View) #
视图是处理Web请求并返回Web响应的函数或类。
函数视图 #
python
# myapp/views.py
from django.shortcuts import render, get_object_or_404
from .models import Article
def article_list(request):
articles = Article.objects.all()
return render(request, 'myapp/article_list.html', {'articles': articles})
def article_detail(request, article_id):
article = get_object_or_404(Article, pk=article_id)
return render(request, 'myapp/article_detail.html', {'article': article})
类视图 #
python
# myapp/views.py
from django.views.generic import ListView, DetailView
from .models import Article
class ArticleListView(ListView):
model = Article
template_name = 'myapp/article_list.html'
context_object_name = 'articles'
class ArticleDetailView(DetailView):
model = Article
template_name = 'myapp/article_detail.html'
context_object_name = 'article'
4.3 模板(Template) #
模板是包含静态HTML和动态内容占位符的文件。Django使用Django模板语言(DTL)。
模板示例 #
html
<!-- myapp/templates/myapp/article_list.html -->
<!DOCTYPE html>
<html>
<head>
<title>文章列表</title>
</head>
<body>
<h1>文章列表</h1>
<ul>
{% for article in articles %}
<li><a href="{% url 'article_detail' article.id %}">{{ article.title }}</a> - {{ article.pub_date }}</li>
{% endfor %}
</ul>
</body>
</html>
4.4 URL路由 #
URL路由配置定义了URL模式与视图之间的映射关系。
python
# myproject/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('articles/', include('myapp.urls')),
]
# myapp/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.ArticleListView.as_view(), name='article_list'),
path('<int:pk>/', views.ArticleDetailView.as_view(), name='article_detail'),
]
5. 创建 Django 应用 #
5.1 创建应用 #
bash
python manage.py startapp myapp
5.2 注册应用 #
在 settings.py 中注册应用:
python
# myproject/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp', # 添加新创建的应用
]
6. Django 管理后台 #
6.1 创建超级用户 #
bash
python manage.py createsuperuser
6.2 注册模型 #
python
# myapp/admin.py
from django.contrib import admin
from .models import Article
admin.site.register(Article)
6.3 访问管理后台 #
启动开发服务器后,访问 http://127.0.0.1:8000/admin/,使用超级用户账号登录。
7. Django 表单 #
7.1 创建表单 #
python
# myapp/forms.py
from django import forms
from .models import Article
class ArticleForm(forms.ModelForm):
class Meta:
model = Article
fields = ['title', 'content', 'author']
7.2 在视图中使用表单 #
python
# myapp/views.py
from django.shortcuts import render, redirect
from .forms import ArticleForm
def article_create(request):
if request.method == 'POST':
form = ArticleForm(request.POST)
if form.is_valid():
form.save()
return redirect('article_list')
else:
form = ArticleForm()
return render(request, 'myapp/article_form.html', {'form': form})
7.3 表单模板 #
html
<!-- myapp/templates/myapp/article_form.html -->
<!DOCTYPE html>
<html>
<head>
<title>创建文章</title>
</head>
<body>
<h1>创建文章</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">保存</button>
</form>
</body>
</html>
8. 数据库操作 #
8.1 查询数据 #
python
# 获取所有文章
articles = Article.objects.all()
# 根据条件过滤
recent_articles = Article.objects.filter(pub_date__year=2023)
# 获取单个对象
article = Article.objects.get(pk=1)
# 排序
articles = Article.objects.order_by('-pub_date')
# 限制结果数量
articles = Article.objects.all()[:5]
8.2 创建数据 #
python
# 方法1
article = Article(title="新文章", content="文章内容", author="作者")
article.save()
# 方法2
article = Article.objects.create(title="新文章", content="文章内容", author="作者")
8.3 更新数据 #
python
article = Article.objects.get(pk=1)
article.title = "更新的标题"
article.save()
# 批量更新
Article.objects.filter(author="作者").update(title="批量更新的标题")
8.4 删除数据 #
python
article = Article.objects.get(pk=1)
article.delete()
# 批量删除
Article.objects.filter(author="作者").delete()
9. 静态文件管理 #
9.1 配置静态文件 #
在 settings.py 中配置静态文件:
python
# myproject/settings.py
STATIC_URL = '/static/'
STATICFILES_DIRS = [
BASE_DIR / "static",
]
STATIC_ROOT = BASE_DIR / "staticfiles"
9.2 在模板中使用静态文件 #
html
<!-- myapp/templates/myapp/article_list.html -->
{% load static %}
<!DOCTYPE html>
<html>
<head>
<title>文章列表</title>
<link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}">
</head>
<body>
<!-- 页面内容 -->
<script src="{% static 'js/script.js' %}"></script>
</body>
</html>
9.3 收集静态文件 #
在部署前运行:
bash
python manage.py collectstatic
10. Django 部署 #
10.1 常见部署选项 #
- Heroku:适合快速部署和扩展
- AWS:Amazon Web Services,提供多种部署方案
- DigitalOcean:简单易用的云服务器
- PythonAnywhere:适合小型应用的托管服务
10.2 使用 Gunicorn 和 Nginx 部署 #
安装 Gunicorn #
bash
pip install gunicorn
运行 Gunicorn #
bash
gunicorn myproject.wsgi
配置 Nginx #
nginx
# /etc/nginx/sites-available/myproject
server {
listen 80;
server_name example.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /path/to/myproject;
}
location / {
include proxy_params;
proxy_pass http://unix:/path/to/myproject/myproject.sock;
}
}
11. Django 最佳实践 #
11.1 项目结构 #
- 使用多个应用来组织代码
- 遵循 DRY (Don’t Repeat Yourself) 原则
- 使用环境变量存储敏感信息
11.2 代码质量 #
- 使用类型提示
- 编写单元测试
- 使用代码风格检查工具(如 flake8)
11.3 性能优化 #
- 使用缓存机制
- 优化数据库查询
- 使用 CDN 存储静态文件
12. 常见问题与解决方案 #
12.1 数据库连接错误 #
确保数据库配置正确,并且数据库服务正在运行。
12.2 静态文件无法访问 #
检查静态文件配置,确保 STATIC_URL 和 STATICFILES_DIRS 设置正确。
12.3 模板加载错误 #
确保模板文件路径正确,并且应用已在 INSTALLED_APPS 中注册。
13. 学习资源 #
总结 #
Django是一个功能强大、灵活且易于使用的Python Web框架,适合构建从简单到复杂的各种Web应用。通过遵循本指南,您可以快速入门Django并逐步掌握其高级功能。