django-视图函数-response
- HttpResponse
- render/SimpleTemplateResponse
- redirect/HttpResponseRedirect
- JsonResponse
- FileResponse
HttpResponse
- 返回一个简单的文本内容
- 实现文件的下载
HttpResponse(content=b"", content_type=None, status=None, charset=None)
-
content : 响应的正文内容,可以是一个字符串,也可以是一个流数据
-
content_type: 设置响应的类型,默认是 text/html
-
status : 设置响应的状态码, 默认值是 200
-
charset : 设置响应的编码格式,默认是 utf-8
浏览器常见的状态码
-
200 : 正常响应
-
201 : 正常响应,代表数据的新增
-
204 : 正常响应,代表数据的被删除
-
301 : 永久重定向
-
302 : 临时重定向
-
304 : 浏览器缓存
-
400 : 请求参数不合法
-
401 : 认证失败
-
403 : 禁止访问
-
404 : 页面找不到
-
405 : 请求方式不正确
-
406 : 请求格式不正确
-
500 : 服务器内部错误
-
502 : 网关错误
render 函数
- 响应一个模板html页面
- 可以将服务器产生的数据传递给模板页面
from django.shortcuts import render
render(request, template_name, context=None, content_type=None, status=None)
- request :
- template_name: 可以是一个列表、一个元组、也可以是一个字符串(常用)
- context : 是一个字典类型,给模板传递的数据
模板位置的设置
- 在项目的根下、新建一个 templates 文件夹 (名字不是固定的、是约定俗成的)
- 在
settings.py
中,设置 模板存放的位置
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
redirect 函数 / HttpResponseRedirect
- 重定向(跳转)到一个路由中
from django.shortcuts import redirect
redirect(to, *args, permanent=False, **kwargs)
- to : 设置路由的地址
- 直接使用路由的地址,以 / 开头
- 使用路由的名称,方便给动态路由设置参数
- args : 设置路由需要的参数
- permanent : 是否采用永久重定向
- kwargs : 设置路由需要的参数,字典格式
PS: redirect(重定向): 当用户发送一个请求、后台处理完数据后、使用 redirect
会向浏览器返回一个 302/301 的状态码, 且 响应的头信息中,包含 Content-length=0,
和 Location, 浏览器检测到 响应的状态码为 302/301,且包含 location, 则浏览器会自动
发送一个请求、且请求的地址为 location 对应的值
render : 只能跳转到模板中,且在跳转到模板的时候,可以传值, 是一次请求,地址栏不会发生改变
redirect : 重定向到路由中、不能携带数据到模板,二次请求,地址栏发生了改变
POST 提交 403 禁止访问
-
在 form 表单中,添加 一个 {% csrf_token %} 标签
-
在 对应的视图函数上、添加一个 @csrf_exempt 装饰器
from django.views.decorators.csrf import csrf_exempt
-
在 settings.py 配置文件中,注释掉 CsrfViewMiddleware 中间件