跳转至

Django视图

在 Django 中,视图是处理请求和返回响应的函数或类。视图可以处理各种类型的 HTTP 请求,如 GET、POST、PUT、DELETE 等,并返回相应的响应,如 HTML 页面、JSON 数据、重定向等。

视图类型

Django 支持两种类型的视图:

  1. 函数视图(Function-based Views, FBV)
  2. 类视图(Class-based Views, CBV)

函数视图

函数视图是一个接收 HttpRequest 对象并返回 HttpResponse 对象的函数。

示例:简单的函数视图

# views.py

from django.http import HttpResponse

def hello(request):
    return HttpResponse("Hello, world!")

URL 路由配置

将函数视图映射到 URL 路由:

# urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('hello/', views.hello, name='hello'),
]

类视图

类视图使用面向对象的方式处理请求,通过继承 Django 提供的视图基类来实现。

示例:简单的类视图

# views.py

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

class HelloView(View):
    def get(self, request):
        return HttpResponse("Hello, world!")

URL 路由配置

将类视图映射到 URL 路由:

# urls.py

from django.urls import path
from .views import HelloView

urlpatterns = [
    path('hello/', HelloView.as_view(), name='hello'),
]

通用类视图(Generic Class-based Views)

Django 提供了一组通用类视图,用于处理常见的任务,如显示列表、展示详情、创建、更新和删除对象。

示例:通用列表视图

# views.py

from django.views.generic import ListView
from .models import MyModel

class MyModelListView(ListView):
    model = MyModel
    template_name = 'mymodel_list.html'
    context_object_name = 'mymodels'

URL 路由配置

# urls.py

from django.urls import path
from .views import MyModelListView

urlpatterns = [
    path('mymodels/', MyModelListView.as_view(), name='mymodel_list'),
]

处理表单提交

函数视图和类视图都可以处理表单提交。下面是一个简单的示例,展示如何处理表单数据。

示例:处理表单提交的函数视图

# views.py

from django.shortcuts import render
from django.http import HttpResponse

def form_view(request):
    if request.method == 'POST':
        name = request.POST.get('name')
        return HttpResponse(f"Hello, {name}!")
    return render(request, 'form.html')

URL 路由配置

# urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('form/', views.form_view, name='form_view'),
]

表单模板

<!-- form.html -->

<form method="post">
    {% csrf_token %}
    <label for="name">Name:</label>
    <input type="text" id="name" name="name">
    <button type="submit">Submit</button>
</form>

处理表单提交的类视图

使用 FormView 处理表单提交:

# views.py

from django.views.generic.edit import FormView
from .forms import MyForm

class MyFormView(FormView):
    template_name = 'form.html'
    form_class = MyForm
    success_url = '/success/'

    def form_valid(self, form):
        name = form.cleaned_data['name']
        return HttpResponse(f"Hello, {name}!")

示例:完整的类视图

下面是一个完整的示例,包括一个表单类和处理表单提交的类视图。

表单类

# forms.py

from django import forms

class MyForm(forms.Form):
    name = forms.CharField(label='Name', max_length=100)

类视图

# views.py

from django.views.generic.edit import FormView
from .forms import MyForm

class MyFormView(FormView):
    template_name = 'form.html'
    form_class = MyForm
    success_url = '/success/'

    def form_valid(self, form):
        name = form.cleaned_data['name']
        return HttpResponse(f"Hello, {name}!")

URL 路由配置

# urls.py

from django.urls import path
from .views import MyFormView

urlpatterns = [
    path('form/', MyFormView.as_view(), name='form_view'),
]

总结

Django 提供了强大的视图系统,允许开发者通过函数视图和类视图处理各种 HTTP 请求。通过学习和掌握 Django 视图的基础知识和使用方法,开发者可以轻松构建和维护 Web 应用程序。无论是简单的函数视图还是复杂的类视图,Django 的视图系统都能满足不同的需求。

评论