视图函数 Response
- HttpResponse
- render /HttpResponseRender
- redirect /HttpResponseRediect
- 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 : 网关错误
rander 函数
- 响应一个模板html页面
- 可以将服务器产生的数据传递给模板
from django.shortcuts import render
render(request, template_name, context=None, content_type=None, status=None)
- request: 请求对象,每一个视图函数都用
- template_name : 模板的名称,html网页的名字,可以是一个列表,一个元组,也可以是一个字符串(常用)
- context : 向模板传递的数据 ,格式是一个字典
- content_type : 响应的类型,默认值是 text/html;charset=utf-8
- status : 响应的状态码,默认是200
模板位置的设置
1.在项目的跟新新建一个 templates 文件夹 (名字不是固定的,但是是约定俗成的)
2.在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 /HttpResponseRediect
- 重定向到一个路由中 ps:重定向到一个请求中
from django.stortcuts import redirect
redirect(to,*args,permanent=False,**kwargs)
1. to : 设置路由的地址
直接使用路由的地址,以 / 开头
使用路由的名称,方便给动态路由设置参数
2. args : 设置路由需要的参数
3. permanent : 是否采用永久重定向
4. kwargs : 设置路由需要的参数,字典格式
ps: redirect(重定向): 当用户发送一个请求,后台处理数据后,使用redirect
会向浏览器返回一个 302/301 的状态码,且 响应的头信息中,包含 Content-length=0
和 Location,浏览器检测到 响应的状态码为 302/301,且包含 location,则浏览器会自动发送
一个请求,且请求地址为localtion对应的值
render : 只能跳转到模板,且在跳转到模板的时候可以传值,是一次请求
redirect : 重定向到路由中,不能携带数据到模板,
POST 提交 403 禁止访问
- 在 form 表单中,添加一个
{% csrt_token %}
标签 - 在 对应的视图函数上,添加一个
@csrf_exempt
装饰器 - 在 setting.py 文件中 注释
django.middleware.csrf
- render 可以给模板传递参数
- redirect 可以给路由传递参数