Django框架——请求与响应

上篇文章我们学习了Django框架——配置文件和视图函数,这篇文章我们学习Django框架——请求与响应。

客户端和服务端的请求与响应过程:客户端访问某个网站并发出URL请求,服务器接受到请求后,根据请求内容来返回响应,如下图所示:

请求对象

在视图函数中,接收了request参数,通过该参数获取到URL路径,请求方式,请求参数,会话,上传文件信息等等,这里我们主要讲解获取请求参数,会话、文件信息会有单独的文章讲解,获取GET请求和POST请求参数一样,这里讲解获取GET请求参数,示例代码如下:

### views.py文件
from django.http import HttpResponse
def Get_Request(request):
    print(request.GET)      # 获取GET请求的参数
    return HttpResponse('OK')
    
    
### urls.py文件
from Product.views import *
from django.urls import path
urlpatterns = [
    path('admin/', admin.site.urls),
    path('Get_Request/',Get_Request)
]

启动程序并访问http://127.0.0.1:5000/Get_Request/和http://127.0.0.1:5000/Get_Request?name=lisi,后端打印结果为:

<QueryDict: {}>
<QueryDict: {'name': ['lisi']}>

GET方法返回的是QueryDict类字典对象,获取QueryDict类字典对象里面数据的方法如下:

print(request.GET.get('name',default='张三'))  # 方法一
print(request.GET['name'])   # 方法二

在方法一中,当get获取的name不存在时,返回default设置的默认值(张三),这里我们建立使用方法一,因为在方法二中,当name不存在时,程序会报错。

访问http://127.0.0.1:5000/Get_Request?name=lisi&name=zhangsan,后端打印结果为:

<QueryDict: {'name': ['lisi', 'zhangsan']}>
zhangsan
zhangsan

当请求出现了两个name参数时,get只会返回最后一个name,当请求参数有几个相同的键时,可以通过getlist方法获取name的所有数据并返回为列表,示例代码如下:

print(request.GET.getlist('name')) 

后端打印结果为:

['lisi', 'zhangsan']

获取请求方式、URL路径、cookie、session、上传文件信息,示例代码如下:

print(request.method)       # 获取请求方式
print(request.path)     # url路径
print(request.get_full_path())      # url完整路径
print(request.COOKIES)      # COOKIES会话技术
print(request.session)      # session会话技术
print(request.FILES)        # 上传文件,前端上传的文件对象

访问http://127.0.0.1:5000/Get_Request/?name=lisi,后端打印结果如下:

GET
/Get_Request/
/Get_Request/?name=lisi
{'csrftoken': 'j86YmXNrJzEqAmtuBwfKV2KnoxlCX6JQ'}
<django.contrib.sessions.backends.db.SessionStore object at 0x00000243ACF3E260>
<MultiValueDict: {}>

响应对象

视图函数的响应主要有四种类型,分别为返回字符串(HttpResponse),返回模版(render),重定向(redirect或HttpResponseRedirect)和返回JSON(JsonResponse)。

HttpResponse

返回字符串主要使用HttpResponse方法,示例代码如下:

## views.py文件
from django.http import HttpResponse
def return_HttpResponse(request)
    return HttpResponse('return_HttpResponse')
    
## urls.py文件
from django.contrib import admin
from django.urls import path
from Product.views import *

urlpatterns = [
    path('admin/', admin.site.urls),
    path('return_HttpResponse/',return_HttpResponse),
]

访问http://127.0.0.1:5000/return_HttpResponse,浏览器显示return_HttpResponse。返回字符串简单了解一下就行,在开发中很少用到。

render

返回模版主要使用render方法,在使用render方法返回模版时,可以根据需求,将数据传递给模版,示例代码如下:

## views.py文件
from django.shortcuts import render
def return_render(request)
 content='你好'
 return render(request,'Hello World.html',{ 'content':content })

## urls.py文件
from django.contrib import admin
from django.urls import path
from Product.views import *

urlpatterns = [
    path('admin/', admin.site.urls),
    path('return_render/',return_render),
]

在Product文件夹创建templates文件夹并创建Hello World.html文件,该文件内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>{{ content }}</h1>
</body>
</html>

访问http://127.0.0.1:5000/return_render,浏览器显示你好。返回模版主要应用在前后端不分离的情况。

redirect或HttpResponseRedirect

重定向主要使用redirect或HttpResponseRedirect,两者没多大区别,示例代码如下:

## views.py文件
from django.shortcuts import redirect
def return_redirect(request)
    return redirect('/return_HttpResponse/')  
    # return HttpResponseRedirect('/return_HttpResponse/')
    
## urls.py文件
from django.contrib import admin
from django.urls import path
from Product.views import *

urlpatterns = [
    path('admin/', admin.site.urls),
    path('return_HttpResponse/',return_HttpResponse),
    path('return_redirect/',return_redirect),
]

访问http://127.0.0.1:5000/return_redirect,就会重定向return_HttpResponse/路由中,浏览器显示return_HttpResponse路由的内容(return_HttpResponse)。

注意:在重定向的URL路径中,前后都需要写斜杠。

JsonResponse

返回JSON类型数据,主要用JsonResponse方法,示例代码如下:

## views.py文件
from django.http import JsonResponse
def return_JsonResponse(request)
    return JsonResponse({'data':'JsonResponse'})  
    
## urls.py文件
from django.contrib import admin
from django.urls import path
from Product.views import *

urlpatterns = [
    path('admin/', admin.site.urls),
    path('return_JsonResponse/',return_JsonResponse),
]

访问http://127.0.0.1:5000/return_JsonResponse/,浏览器显示{"data": "JsonResponse"},返回JSON主要用于前后端分离的情况。

好了,Django框架——请求与响应就学习到这里,下篇文章我们学习Django框架——路由

公众号:白巧克力LIN

该公众号发布Python、数据库、Linux、Flask、Django、自动化测试、Git、算法、前端、服务器等相关文章!

- END -

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白巧克力LIN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值