django-视图函数-response

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 : 是一个字典类型,给模板传递的数据

模板位置的设置

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

  1. 在 form 表单中,添加 一个 {% csrf_token %} 标签

  2. 在 对应的视图函数上、添加一个 @csrf_exempt 装饰器
    from django.views.decorators.csrf import csrf_exempt

  3. 在 settings.py 配置文件中,注释掉 CsrfViewMiddleware 中间件

猜你喜欢

转载自blog.csdn.net/qq_40679091/article/details/109147961