文章目录
- 一、视图概述
- 二、请求对象HttpRequest
- (1)GET
- (2)POST
- (3)body
- (4)path
- (5)method
- 三、响应对象HttpResponse
- (1)HttpResponse()
- (2)render()
- (3)redirect()
此文章参考菜鸟教程:Django 视图 | 菜鸟教程 (runoob.com)
Django版本:
>>> django.VERSION
(4, 1, 0, 'final', 0)
PS:基于前几章的进度进行修改
一、视图概述
-
一个视图函数简称为视图,它是Python的一个函数,主要功能是接受Web请求并且返回Web响应,响应的请求可以是一个HTML页面、一个404错误页面、一个重定向页面、一个XML文档或者是一张图片
-
无论视图本身包含什么逻辑,都需要返回响应,代码写在哪里都可以,只要是在Python目录下即可,一般来说都会放在项目的views.py
文件中,前几章的testdb.py
就是视图文件
-
每个视图函数都负责返回一个HttpResponse
对象,对象中包含生成的响应,而视图层中有两个重要的对象:
请求对象HttpRequest
响应对象HttpResponse
二、请求对象HttpRequest
- 请求对象HttpRequest简称Request对象,下面看几个常用的
Request属性
(1)GET
- 数据类型是
QueryDict
,一个类似与字典的对象,包含了HTTP GET
的所有参数 - 有相同的键,旧把所有的值放到对应的列表里,取值格式为
对象.方法
,下面是实例:
- 创建一个views.py文件,写入
get():返回字符串,如果改建有多个值,那么会取出该建的最后一个值
from django.http import HttpResponse
def test(request):
name = request.GET.get("name")
return HttpResponse('you name is : {}'.format(name))
- 修改urls.py文件
from django.urls import path
from . import views
urlpatterns = [
path('test/',views.test),
]
python manage.py runserver 0.0.0.0:8000
- 访问
127.0.0.1:8000/test
,可以发现,因为没有传参,所以get()
没有获取到值
(2)POST
- 修改views.py文件
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def test(request):
name = request.POST.get("name")
return HttpResponse('you name is : {}'.format(name))
- 注释:
当采用客户端象 django 的服务器提交 post 请求时,会得到403,权限异常。这是因为 django 针对提交的请求有校验,所以需要在视图函数之前添加装饰器
(3)body
- 数据类型是二进制字节流,是原生请求体里的参数内容,在HTTP中主要作用于POST==(GET没有请求体)==
- body在HTTP中不常用,而在处理非HTTP形式的报文时非常有用,例如:二进制图片、XML、Json等,下面来看实例:
- 修改views.py文件
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def test(request):
name = request.body
print(name)
return HttpResponse('Test')
- 访问
IP:8000/test/
,直接访问是GET方式
(4)path
- 修改views.py文件
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def test(request):
name = request.path
print(name)
return HttpResponse('Test')
- 使用
postman
访问,使用POST方式,查看终端
(5)method
- 获取当前的请求方式,数据类型是字符串,输出结果是大写的,实例:
- 修改views.py文件
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def test(request):
name = request.method
print(name)
return HttpResponse('Test')
三、响应对象HttpResponse
- HttpResponse()
- render()
- redirect()
(1)HttpResponse()
- 返回文本,参数为字符串,字符串中添加文本内容,如果参数中含有HTML标签,也可以进行渲染,之前使用的基本都是此方式,实例:
def runoob(request):
return HttpResponse("<a href='https://www.runoob.com/'>菜鸟教程</a>")
from django.http import HttpResponse
def test(request):
return HttpResponse("Baidu")
(2)render()
render()方法参数:
render(request, template_name, context=None, content_type=None, status=None, using=None)
request
:必要参数,浏览器向服务器发送的请求对象,包含用户信息、请求内容、请求方式等template_name
:必要参数,设置模板文件名,用于生成网页内容context
:对模板上下文即模板变量赋值,以字典格式表示,默认情况下是一个空字典content_type
:响应内容的数据格式,一般情况下使用默认值即可status
:HTTP状态码,默认是200using
:设置模板引擎,用于解析模板文件、生成网页内容等
from django.http import HttpResponse
from django.shortcuts import render
def test(request):
name = "Test"
return render(request,"test.html",{"name":name})
(3)redirect()
- 重定向,跳转新页面,参数为字符串,字符串中填写页面路径,一般适用于form表单提交后,跳转到新页面
- 实例:
- 修改urls.py路由文件
from django.urls import path
from . import views
urlpatterns = [
path('test/',views.test),
path('index/',views.index),
]
- 修改views.py
from django.http import HttpResponse
from django.shortcuts import redirect
def test(request):
return redirect("/index/")
def index(request):
return HttpResponse("hello world!!")
注意:render和redirect是在HttpResponse的基础上进行了封装,具体为:
render
:底层返回的是HttpResponse对象
redirect
:底层继承的是HttpResponse对象
终端输出,可以看到跳转重定向
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)