Django复杂一点的视图
时间: 2023-10-16 13:16:28 浏览: 41
以下是一个复杂的 Django 视图的示例:
```python
from django.shortcuts import render, get_object_or_404
from django.views.decorators.http import require_http_methods
from .models import Product, Order
@require_http_methods(["GET", "POST"])
def product_detail(request, product_id):
product = get_object_or_404(Product, id=product_id)
if request.method == 'POST':
form = OrderForm(request.POST)
if form.is_valid():
quantity = form.cleaned_data['quantity']
order = Order(product=product, quantity=quantity, user=request.user)
order.save()
return redirect('order_confirmation', order_id=order.id)
else:
form = OrderForm()
return render(request, 'product_detail.html', {'product': product, 'form': form})
def order_confirmation(request, order_id):
order = get_object_or_404(Order, id=order_id, user=request.user)
return render(request, 'order_confirmation.html', {'order': order})
```
该视图包括两个函数,一个用于显示产品详细信息,另一个用于显示订单确认页面。其中,`@require_http_methods(["GET", "POST"])` 装饰器指定了该视图只接受 GET 和 POST 请求。
`product_detail` 函数首先使用 `get_object_or_404` 方法获取指定 ID 的产品。如果请求方法为 POST,则使用 `OrderForm` 验证表单数据,创建订单并重定向到订单确认页面。否则,只渲染模板并将表单传递给它。
`order_confirmation` 函数获取指定 ID 的订单并将其传递给订单确认模板。如果订单不存在或不属于当前用户,则返回 404 错误页面。
这个示例包含了许多 Django 视图的常见功能,例如从数据库中获取对象、使用表单验证数据、创建对象以及重定向和渲染模板。