本篇主要记录如何定义视图,错误视图有哪些并如何实现自定义,
HTTP方法装饰器定义及实现,还有csrf中间件设置位置及关闭。
定义视图
一般在views.py文件下定义
视图参数:
错误视图
400视图
当出现SuspiciousOperation异常并且代码中没有进行处理时,
Django会发生“bad request”异常。
默认视图是django.views.defaults.bad_request。
主要是由于用户操作导致的异常。
403视图
对于HTTP 403异常,默认的视图是django.views.defaults.permission_denied,
该视图会在网页中输出“403 Forbidden”或者加载403.html
404视图
当视图程序抛出HTTP 404异常时,Django会调用一个视图去处理它,
默认视图是django.views.defaults.page_not_found()。
page_not_found()会在网页中输出简单的“Not Found”字样或者加载404.html。
500视图
当出现运行时(服务器代码)异常时,
Django会调用django.views.defaults.server_error视图。
server_error视图会在网页中输出简单的“Server Error”字样或者加载500.html。
自定义404视图
1.配置settings.py
2.在templates目录下定义一个404.html
内容如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>404</title>
</head>
<body>
<h1>404页面</h1>
<h3>页面丢失</h3>
<p>{{request_path}}页面不存在。你可以点击下面的按钮,返回主页。 </p>
<br/>
<a href="/">返回首页</a>
</body>
</html>
request_path:导致错误的网址
注意:Debug如果为True永远不会调用404.html页面
HTTP方法装饰器
概述
HTTP方法装饰器用于约束访问视图的请求类型,
该装饰器位于django.views.decorators.http模块。
当访问视图的请求类型不正确时,
HTTP方法装饰器将会返回django.http.HttpResponseNotAllowed异常错误。
代码示例
from django.views.decorators.http import require_http_methods
@require_http_methods(['GET'])
def students(request):
""" 学生列表 """
return HttpResponse('这是学生列表')
注意事项
HTTP请求类型必须使用大写字母。
如果仅允许使用GET、POST或者其他安全类型(如GET和HEAD方法),
可以使用django.views.decorators.http模块下面的其他装饰器。
require_GET():装饰器可以要求视图只接受GET方法。
示例:
from django.views.decorators.http import require_http_methods, require_GET
@require_GET
def add_student(request):
""" 创建学生页面 """
return render(request, 'myapp/createStudent.html')
require_POST():装饰器可以要求视图只接受POST方法。
require_safe():装饰器可以要求视图只接收GET和HEAD方法。
关闭CSRF验证
可通过修改Projects/settings.py中MIDDLEWARE,暂时关闭csrf中间件验证。
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
#'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]