IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【Django框架】——22 Django视图 04 HttpRequest对象 -> 正文阅读

[Python知识库]【Django框架】——22 Django视图 04 HttpRequest对象

在这里插入图片描述

在这里插入图片描述


利? HTTP协议向服务器传参有以下几种途径:

  • 提取URL的特定部分,如/app/zhangsan/18/,可以在服务器端的路由中?正则表达式截取;

  • 查询字符串(query string),形如key1=value1&key2=value2

  • 请求体(body)中发送的数据,?如表单数据、json、xml

  • http报?的头(header)中。

1.URL路径参数

如果想从URL中获取值,需要在正则表达式中使?分组
获取值分为两种?式

  • 位置参数
    参数的位置不能错

  • 关键字参数
    参数的位置可以变,跟关键字保持?致即可

注意:两种参数的?式不要混合使?,在?个正则表达式中只能使??种参数?式

分别使?以上两种获取URL值的?式提取出20 60 http://127.0.0.1:8000/20/60/

位置参数

路由url

# urls.py
from django.urls import re_path
from film import views


urlpatterns = [
    re_path('^httprequest/(\w+)/(\d+)/$', views.httpRequestView),
]

在这里插入图片描述
视图函数

# views.py
from django.http import HttpRequest, HttpResponse

# Create your views here.


def httpRequestView(request, uname, age):
    return HttpResponse(f'My name is {uname} and I am {age} years old!')

在这里插入图片描述

访问:http://127.0.0.1:8000/httprequest/awei/22/
在这里插入图片描述

关键字参数

url

# /urls.py
from django.urls import path, re_path
from project01 import views


urlpatterns = [
    re_path('^people/(?P<name>\w+)/(?P<age>\d+)/$', views.peopleView),
    
    path('people/<str:name>/<int:age>/', views.peopleView),
]

视图函数

from django.http import HttpResponse


def peopleView(request, age, name):
    """
    :param request: 
    :param age: 
    :param name: 
    :return: 
    """
    print(name)
    return HttpResponse('My name is %s and I am %s year old!' % (name, age))

在这里插入图片描述

访问:
在这里插入图片描述

2. Django中的QueryDict对象

HttpRequest对象的属性GET、POSTQueryDict类型的对象。

访问:http://127.0.0.1:8000/people/awei/22/

在这里插入图片描述

GET请求:<WSGIRequest: GET '/people/awei/22/'>

在这里插入图片描述

python字典不同,QueryDict类型的对象?来处理同?个键带有多个值的情况。

?法get():根据键获取值

  • 如果?个键同时拥有多个值将获取最后?个值

  • 如果键不存在则返回None值,可以设置默认值进?后续 处理

  • get('键',默认值)

?法getlist():根据键获取值,值以列表返回,可以获取指定键的所有值

  • 如果键不存在则返回空列表[],可以设置默认值进?后续处理
  • getlist('键',默认值)

3. 查询字符串Query String

获取请求路径中的查询字符串参数(形如?k1=v1&k2=v2),可以通过request.GET属性获取,返回QueryDict对象。

视图函数

# /get/?uname=awei&age=22&age=18/
from django.http import HttpResponse


def queryView(request):
    uname = request.GET.get('uname')
    age = request.GET.get('age')
    age_list = request.GET.getlist('age')
    
    print(f'uname={uname}')
    print(f'age={age}')
    print(f'age_list={age_list}')
    
    return HttpResponse('QueryDict')

在这里插入图片描述

路由

urlpatterns = [
    path('query/', views.queryView)
]

访问:http://127.0.0.1:8000/query/?uname=awei&age=22&age=18/
在这里插入图片描述

重要:查询字符串不区分请求?式,即假使客户端进?POST?式的请求,依然可以通过request.GET获取请求中的查询字符串数据。

4. 请求体

请求体数据格式不固定,可以是表单类型字符串,可以是JSON字符串,可以是XML字符串,应区别对待。

可以发送请求体数据的请求?式有POST、PUT、PATCH、DELETE

Django默认开启了CSRF防护,会对上述请求?式进?CSRF防护验证,在测试时可以关闭CSRF防护机制,?法为在settings.py?件中注释掉CSRF中间件,如:

4.1 表单类型 Form Data

前端发送的表单类型的请求体数据,可以通过request.POST属性获取,返回
QueryDict对象。

def postView(request):
    uname = request.POST.get('uname')
    age = request.POST.get('age')
    alist = request.POST.getlist('uname')

    print(f'uname={uname}')
    print(f'age={age}')
    print(f'age_list={alist}')

    return HttpResponse('Post 请求')

在这里插入图片描述

在这里插入图片描述

4.2 ?表单类型 Non-Form Data

?表单类型的请求体数据,Django?法?动解析,可以通过request.body属性获取最原始的请求体数据,??按照请求体格式(JSON、XML等)进?解析。

request.body返回bytes类型。

例如要获取请求体中的如下JSON数据

# 注意测试时,key value必须?双引号,value为数字时可以不加。
{"uname": "awei", "age": 22+}

可以进?如下?法操作:

import json


def post_json(request):
    json_dict = json.loads(request.body.decode())
    print(req_data['uname'])
    print(req_data['age'])
    return HttpResponse('OK')

5. 请求头

可以通过request.META属性获取请求头headers中的数据,request.META为字典类型。

常?的请求头如:

CONTENT_LENGTH– The length of the request body (as a string).

CONTENT_TYPE– The MIME type of the request body.

HTTP_ACCEPT– Acceptable content types for the response.

HTTP_ACCEPT_ENCODING– Acceptable encodings for the response.

HTTP_ACCEPT_LANGUAGE– Acceptable languages for the response.

HTTP_HOST– The HTTP Host header sent by the client.

HTTP_REFERER– The referring page, if any.

HTTP_USER_AGENT– The client’s user-agent string.

QUERY_STRING– The query string, as a single (unparsed) string.

REMOTE_ADDR– The IP address of the client.

REMOTE_HOST– The hostname of the client.

REMOTE_USER– The user authenticated by the Web server, if any.

REQUEST_METHOD– A string such as"GET"or"POST".

SERVER_NAME– The hostname of the server.

SERVER_PORT– The port of the server (as a string).

具体使?如:

def get_headers(request):
    print(request.META['CONTENT_TYPE'])
    return HttpResponse('OK')

6. 其他常?HttpRequest对象属性

  • method:?个字符串,表示请求使?的HTTP?法,常?值包括:'GET''POST'

  • user:请求的?户对象。

  • path:?个字符串,表示请求的??的完整路径,不包含域名和参数部分。

  • encoding:?个字符串,表示提交的数据的编码?式。

    • 如果为None则表示使?浏览器的默认设置,?般为utf-8
    • 这个属性是可写的,可以通过修改它来修改访问表单数据使?的编码,接下来对属性的任何访问将使?新的encoding值。
  • FILES:?个类似于字典的对象,包含所有的上传?件。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 11:52:04  更:2022-10-31 11:54:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/20 4:41:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码