首页 > 其他分享 >Django框架之request对象

Django框架之request对象

时间:2024-03-28 22:22:07浏览次数:18  
标签:请求 框架 GET 对象 request django POST Django

一、request对象

1、简介

服务器接收到http协议的请求后,会根据报文创建HttpRequest对象,这个对象不需要我们创建,直接使用服务器构造好的对象就可以。视图的第一个参数必须是HttpRequest对象,在django.http模块中定义了HttpRequest对象的API。

ps:get请求携带的数据是有大小限制的,大概好像只有4KB左右,而post请求没有限制

2、提交GET请求

(1)前端

  • form表单中action属性,不写默认是当前路由地址
  • form表单中的method属性,不写默认是GET请求
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="get">
    <p>username : <input type="text" name="username"></p>
    <p>password : <input type="password" name="password"></p>
    <p><input type="submit"></p>
</form>
</body>
</html>

(2)后端

  • app01/views.py
from django.shortcuts import render

def register(request):

    return render(request, 'register.html')
  • urls
from django.contrib import admin
from django.urls import path
from app01 import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path("register/", views.register)
]
  • 前端路由地址访问
    • http://127.0.0.1:8000/register

3、提交POST请求

(1)前端

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="post">
    <p>username : <input type="text" name="username"></p>
    <p>password : <input type="password" name="password"></p>
    <p><input type="submit"></p>
</form>
</body>
</html>

(2)后端

from django.shortcuts import render

def register(request):

    return render(request, 'register.html')

(3)POST请求报错

  • 当前端form表单发送POST请求时,会报一个错,导致后端崩溃
Forbidden (403)
CSRF verification failed. Request aborted.

You are seeing this message because this site requires a CSRF cookie when submitting forms. This cookie is required for security reasons, to ensure that your browser is not being hijacked by third parties.

If you have configured your browser to disable cookies, please re-enable them, at least for this site, or for “same-origin” requests.

(4)解决办法

  • 将settings.py文件中的配置注释掉,在后面的学习中我们会逐步的解决掉这个问题
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',
]

二、request对象属性和方法

在Django中,请求对象(HttpRequest对象)是Django视图函数的一个重要参数,它包含了关于HTTP请求的各种信息。通过请求对象,您可以访问请求中的各种数据,如GET和POST参数、请求头、COOKIES、用户信息等。以下是一些常用的HttpRequest对象的属性和方法:

1、request对象属性

  • request.GET:一个类似字典的对象,可以通过键名来获取对应的值。
  • request.POST:它也是一个类似字典的对象
  • request.method:返回HTTP请求的方法,比如GET、POST等,并且是全大写的字符串形式。
  • request.path:表示请求的路径部分,不包括域名和查询参数。
  • request.user:表示当前用户的对象(如果用户已经通过身份验证)。
  • request.META:包含有关请求的元数据的字典,如请求头信息、IP地址等。
  • request.headers属性:表示请求头部信息,是一个类似字典的对象。
  • request.COOKIES属性:表示请求中的Cookie信息.
  • request.session属性:表示当前会话的信息.

2、request对象方法

  • request.GET.get(key, default=None):获取GET参数中指定键的值,只获取列表最后一个元素。
  • request.GET.getlist() :直接将列表取出
  • request.POST.get(key, default=None):获取POST参数中指定键的值,只获取列表最后一个元素。
  • request.POST.getlist() :直接将列表取出
  • request.COOKIES.get(key, default=None):获取COOKIES中指定键的值。
  • request.is_secure():如果请求通过HTTPS,则返回True。
  • request.is_ajax():如果请求是通过Ajax发送的,则返回True。
  • get_full_path()方法:返回完整的请求路径,包括域名、路径和查询参数。
  • build_absolute_uri()方法:根据当前请求构建一个完整的URL。

在Django视图函数中,通常会将请求对象作为第一个参数传递,例如:

from django.http import HttpResponse

def my_view(request):
    # 访问请求对象的属性和方法
    if request.method == 'GET':
        # 处理GET请求
        return HttpResponse('This is a GET request')
    elif request.method == 'POST':
        # 处理POST请求
        return HttpResponse('This is a POST request')

通过访问请求对象的属性和方法,您可以根据请求中的信息来动态生成响应,实现不同的业务逻辑和交互。

标签:请求,框架,GET,对象,request,django,POST,Django
From: https://www.cnblogs.com/xiao01/p/18102761

相关文章

  • SpringCloud 和 Dubbo 区别: 比较微服务框架的差异
    1.1SpringCloud简介SpringCloud是一个用于构建云原生应用的框架集合,它为开发者提供了一套完整的工具链,用于快速搭建分布式系统。SpringCloud基于 SpringBoot 开发,具有如下特点:提供了丰富的组件,如配置管理、服务注册与发现、断路器等采用声明式的编程模型,易于上手与Spr......
  • Django框架之Django的安装与使用
    首先我们需要先确定好自己电脑上的python解释器环境,否则会导致后面项目所需要的库安装不了以及项目无法运行的问题。一、Django框架下载要下载Django并开始使用它,你可以按照以下步骤进行:1、安装Python首先,确保你的计算机上已经安装了Python。你可以从Python官方网站下载最......
  • pytest框架的封装以及用例管理框架
    pytest框架的封装以及用例管理框架公共类统一封装requests_util02.pytest_api01.py自动化测试的基础自动化测试的介入点自动化测试和手工测试占比自动化实施过程pytest元素定位元素定位查找元素定位的方式通过ID定位通过Name定位通过ClassName定位通过TagName......
  • django小白必会
    Django基础1.Django小白必会三板斧1.1HttpResponse返回纯文本或者JSON数据fromdjango.shortcutsimportrender,HttpResponsedefindex(request):print(request)#HttpResponse:返回纯文本或者JSON数据returnHttpResponse("ok")1.2render渲染前端......
  • Ajax和django自带序列化组件
    Ajax和django自带序列化组件1.Ajax1.1Ajax介绍AJAX(AsynchronousJavascriptAndXML)翻译成中文就是“异步的Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML)。AJAX不是新的编程语言,而是一种使用现有标准的新方法......
  • MNN:轻量级深度学习推理框架的优雅之选
    在深度学习领域,推理框架的选择对于模型的应用至关重要。MNN,作为阿里巴巴开源的一款轻量级深度学习推理框架,凭借其出色的性能和易用性,逐渐成为了众多开发者的首选。本文将为大家详细介绍MNN的特点、安装及编译过程,带您领略这一优雅之选的魅力。一、MNN:轻量级推理框架的璀璨......
  • 前端学习-UI框架学习-Bootstrap5-006-表格
    菜鸟教程链接基础表格<template><divclass="containermt-3"><h2>基础表格</h2><p>.table类来设置基础表格的样式:</p><tableclass="table"><thead><tr>&l......
  • SpringBoot框架学习
    SpringBoot相比Spring的优点1.开发基于Spring的应⽤程序很容易。2.SpringBoot项⽬所需的开发或⼯程时间明显减少,通常会提⾼整体⽣产⼒。3.SpringBoot不需要编写⼤量样板代码、XML配置和注释。4.Spring引导应⽤程序可以很容易地与Spring⽣态系统集成,如SpringJDB......
  • 前端学习-UI框架学习-Bootstrap5-005-颜色
    菜鸟教程学习链接字体颜色Bootstrap5提供了一些有代表意义的颜色类:.text-muted,.text-primary,.text-success,.text-info,.text-warning,.text-danger,.text-secondary,.text-white,.text-dark,.text-body(默认颜色,为黑色)and.text-light:可以设置文本颜色透明度......
  • 在Vue.js框架中,activated和created的区别
    在Vue.js框架中,activated和created两个钩子函数都是在组件被创建时执行的函数,但它们的使用场景略有不同。createdcreated钩子函数是在组件被创建(即实例化)时执行的,可以用它来初始化组件的数据、监听事件、调用方法等操作。它是组件生命周期中的第一个钩子函数,通常用于组件初......