当前位置:首页 > Python > 正文

Django视图创建教程 - 函数视图与类视图详解 | Django开发指南

Django视图创建完全指南

掌握函数视图和类视图的使用方法,构建强大的Web应用

什么是Django视图?

在Django框架中,视图(View)是处理用户请求并返回响应的核心组件。每个视图负责完成以下任务:

  • 接收HTTP请求对象作为参数
  • 执行业务逻辑或数据处理
  • 返回HTTP响应对象

视图是Django MTV模式中的核心组件:模型(Model)、模板(Template)、视图(View)

创建函数视图

函数视图是最基础的视图类型,通过Python函数实现:

基础函数视图示例

# views.py
from django.http import HttpResponse

def hello_world(request):
    return HttpResponse("Hello, World!")

带参数的函数视图

# views.py
from django.http import HttpResponse

def greet_user(request, username):
    return HttpResponse(f"Hello, {username}!")

# urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('greet/<str:username>/', views.greet_user, name='greet'),
]

创建类视图

类视图提供更结构化的方式处理请求,尤其适合处理多种HTTP方法:

基础类视图示例

# views.py
from django.views import View
from django.http import HttpResponse

class HomeView(View):
    def get(self, request):
        return HttpResponse("Welcome to our homepage!")
    
    def post(self, request):
        # 处理POST请求
        return HttpResponse("POST request received")

# urls.py
from django.urls import path
from .views import HomeView

urlpatterns = [
    path('home/', HomeView.as_view(), name='home'),
]

通用类视图示例

# views.py
from django.views.generic import ListView
from .models import Article

class ArticleListView(ListView):
    model = Article
    template_name = 'article_list.html'
    context_object_name = 'articles'
    
    def get_queryset(self):
        return Article.objects.filter(published=True)

# urls.py
from django.urls import path
from .views import ArticleListView

urlpatterns = [
    path('articles/', ArticleListView.as_view(), name='article_list'),
]

视图最佳实践

1. 保持视图简洁

将业务逻辑移到模型或单独的服务层,避免视图过于复杂。

2. 使用装饰器

使用@login_required等装饰器处理访问控制:

from django.contrib.auth.decorators import login_required

@login_required
def dashboard(request):
    return render(request, 'dashboard.html')

3. 合理使用混合类

通过混合类(Mixins)重用类视图中的功能:

class StaffRequiredMixin:
    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_staff:
            raise PermissionDenied
        return super().dispatch(request, *args, **kwargs)

视图调试技巧

调试工具

  • Django Debug Toolbar
  • print()语句
  • logging模块

常见错误

  • URL配置错误
  • 缺少返回语句
  • 未处理异常

测试视图

  • Django测试客户端
  • pytest-django
  • 单元测试

下一步学习建议

掌握视图创建后,继续学习:

Django模型设计
模板系统
表单处理
REST API开发

发表评论