个人 Django 资源汇总(含代码示例)
Django 是一个功能完备的 Python Web 框架,广泛应用于 Web 服务端开发。下面将为你提供一些关键的 Django 资源,并配上相应的代码示例,帮助你快速掌握 Django 的核心概念与最佳实践。
1. Django 入门:搭建第一个 Web 应用
创建 Django 项目
首先,确保你已经安装了 Django:
pip install django
然后,创建一个新的 Django 项目:
django-admin startproject myproject
cd myproject
python manage.py runserver
访问 http://127.0.0.1:8000/
就可以看到 Django 默认的欢迎页面。
创建 Django 应用
Django 项目可以包含多个应用,每个应用负责某个特定功能。我们可以创建一个名为 blog
的应用:
python manage.py startapp blog
接下来,将 blog
添加到项目的 settings.py
文件的 INSTALLED_APPS
列表中。
视图与路由
在 blog/views.py
中添加一个视图:
from django.http import HttpResponse
def home(request):
return HttpResponse("Welcome to my blog!")
接下来,在 blog/urls.py
中添加 URL 路由:
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
]
然后,在 myproject/urls.py
中引用 blog.urls
:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')),
]
现在访问 http://127.0.0.1:8000/
可以看到 “Welcome to my blog!”。
2. Django 模型与数据库操作
Django 使用 ORM(对象关系映射)来处理数据库操作。在 blog/models.py
中定义一个模型:
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
published_date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
然后执行数据库迁移命令:
python manage.py makemigrations
python manage.py migrate
创建数据
我们可以通过 Django 的 Admin 后台或者 Django shell 来创建数据。首先,在 blog/admin.py
注册模型:
from django.contrib import admin
from .models import Post
admin.site.register(Post)
接着,创建一个超级用户:
python manage.py createsuperuser
登录 Admin 后台 http://127.0.0.1:8000/admin/
,你可以看到 Post
模型,并能轻松添加数据。
查询数据
你也可以通过 Django shell 进行交互式查询:
python manage.py shell
然后在 shell 中执行以下代码:
from blog.models import Post
# 创建一个新帖子
Post.objects.create(title="My first post", content="This is the content of my first post")
# 获取所有帖子
posts = Post.objects.all()
for post in posts:
print(post.title)
3. Django 模板引擎
Django 使用内建的模板引擎渲染 HTML 页面。在 blog/views.py
中,我们可以使用模板返回 HTML 内容:
from django.shortcuts import render
from .models import Post
def home(request):
posts = Post.objects.all()
return render(request, 'home.html', {'posts': posts})
然后在 blog/templates
目录下创建 home.html
文件,内容如下:
<!DOCTYPE html>
<html>
<head>
<title>My Blog</title>
</head>
<body>
<h1>Welcome to my blog!</h1>
<ul>
{% for post in posts %}
<li>{{ post.title }}</li>
{% endfor %}
</ul>
</body>
</html>
这样,每次访问首页时,Django 会渲染并返回所有帖子标题。
4. Django Rest Framework (DRF) 构建 API
DRF 是一个扩展库,专门用于构建 RESTful API。首先,安装 DRF:
pip install djangorestframework
然后,添加到 INSTALLED_APPS
中:
INSTALLED_APPS = [
'rest_framework',
'blog',
]
创建序列化器
在 blog/serializers.py
中创建 Post
模型的序列化器:
from rest_framework import serializers
from .models import Post
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = ['id', 'title', 'content', 'published_date']
创建视图
在 blog/views.py
中使用 DRF 的 APIView
或 ViewSet
来创建 API 视图:
from rest_framework import viewsets
from .models import Post
from .serializers import PostSerializer
class PostViewSet(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
路由配置
在 blog/urls.py
中添加 API 路由:
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import PostViewSet
router = DefaultRouter()
router.register(r'posts', PostViewSet)
urlpatterns = [
path('api/', include(router.urls)),
]
现在,你可以通过 http://127.0.0.1:8000/api/posts/
获取所有帖子。
5. Django 部署与优化
使用 Gunicorn 和 Nginx 部署 Django
- 安装 Gunicorn:
pip install gunicorn
- 启动 Gunicorn:
gunicorn myproject.wsgi:application
- 配置 Nginx:使用 Nginx 作为反向代理服务器,配置
nginx.conf
文件:server { listen 80; server_name your_domain.com; location / { proxy_pass http://127.0.0.1:8000; } }
- 重启 Nginx:
sudo systemctl restart nginx
使用 Docker 部署 Django
- 创建
Dockerfile
:FROM python:3.9-slim WORKDIR /app COPY . /app RUN pip install -r requirements.txt CMD ["gunicorn", "myproject.wsgi:application", "--bind", "0.0.0.0:8000"]
- 构建 Docker 镜像并运行:
docker build -t mydjangoapp . docker run -p 8000:8000 mydjangoapp
6. Django 性能优化
- 缓存:使用
django-redis
进行缓存,减轻数据库负担。 - 数据库优化:通过
select_related
和prefetch_related
优化数据库查询。 - 异步任务:使用 Celery 来处理后台异步任务,避免阻塞主线程。
pip install celery redis
在 settings.py
配置 Celery:
CELERY_BROKER_URL = 'redis://localhost:6379/0'
总结
这些代码示例涵盖了 Django 开发的核心部分,从创建项目、构建模型、视图与路由,到 API 构建、部署和优化等。通过这些代码示例,你可以快速入门并深入了解 Django 的强大功能。如果有更高级的需求,可以根据项目的实际需求,进一步了解 Django 的高级特性和最佳实践。
发表回复