django-视图函数 Response

视图函数 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 禁止访问

  1. 在 form 表单中,添加一个 {% csrt_token %} 标签
  2. 在 对应的视图函数上,添加一个 @csrf_exempt 装饰器
  3. 在 setting.py 文件中 注释 django.middleware.csrf
  • render 可以给模板传递参数
  • redirect 可以给路由传递参数

你可能感兴趣的:(django,python,django)