Django 视图

2024年11月11日 Django 视图 极客笔记

Django 视图

视图是我们将业务逻辑放置的地方。视图是一个用于执行一些业务逻辑并向用户返回响应的Python函数。这个响应可以是一个Web页面的HTML内容,或者一个重定向,或者一个404错误。

所有的视图函数都被创建在Django应用程序的 views.py 文件内。

Django 视图简单示例

//views.py

import datetime
# Create your views here.
from django.http import HttpResponse
def index(request):
    now = datetime.datetime.now()
    html = "<html><body><h3>Now time is %s.</h3></body></html>" % now
    return HttpResponse(html)    # rendering the template in HttpResponse

让我们逐步来看代码。

首先,我们将导入DateTime库,该库提供了一个获取当前日期和时间以及HttpResponse类的方法。

接下来,我们定义一个视图函数index,该函数接收HTTP请求并进行响应。

当URL在urls.py中映射时,视图函数会被调用。

例如

path('index/', views.index),

输出:

返回错误

Django提供了各种内置错误类,这些类是 HttpResponse 的子类,并用于将错误消息显示为HTTP响应。下面列出了一些类。

描述
class HttpResponseNotModified 用于指示页面自用户上次请求以来未修改(状态码304)。
class HttpResponseBadRequest 它的行为与HttpResponse相同,但使用400状态码。
class HttpResponseNotFound 它的行为与HttpResponse相同,但使用404状态码。
class HttpResponseNotAllowed 它的行为与HttpResponse相同,但使用410状态码。
HttpResponseServerError 它的行为与HttpResponse相同,但使用500状态码。

Django视图示例

// views.py

from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse, HttpResponseNotFound
def index(request):
    a = 1
    if a:
        return HttpResponseNotFound('<h1>Page not found</h1>')
    else:
        return HttpResponse('<h1>Page was found</h1>') # rendering the template in HttpResponse

输出:

Django视图HTTP修饰器

HTTP修饰器用于基于请求方法限制对视图的访问。

此类修饰器列于django.views.decorators.http,并在条件不满足时返回django.http.HttpResponseNotAllowed。

语法

require_http_methods(request_method_list) 

Django Http修饰器示例

//views.py

from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse, HttpResponseNotFound
from django.views.decorators.http import require_http_methods
@require_http_methods(["GET"])
def show(request):
    return HttpResponse('<h1>This is Http GET request.</h1>')

只有当请求是HTTP GET请求时,才会执行此方法。

//urls.py

from django.contrib import admin
from django.urls import path
from myapp import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', views.index),
    path('show/',  views.show),
]

输出:

本文链接:http://so.lmcjl.com/news/17585/

展开阅读全文