Django框架之request对象

一、request对象

1、简介

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

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

2、form表单提交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、form表单提交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')

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

  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值