Django版本:
>>> django.VERSION
(4, 1, 0, 'final', 0)
PS:基于前几章的进度进行修改
一个视图函数简称为视图,它是Python的一个函数,主要功能是接受Web请求并且返回Web响应,响应的请求可以是一个HTML页面、一个404错误页面、一个重定向页面、一个XML文档或者是一张图片
无论视图本身包含什么逻辑,都需要返回响应,代码写在哪里都可以,只要是在Python目录下即可,一般来说都会放在项目的views.py文件中,前几章的testdb.py就是视图文件
每个视图函数都负责返回一个HttpResponse对象,对象中包含生成的响应,而视图层中有两个重要的对象:
请求对象HttpRequest
响应对象HttpResponse
Request属性QueryDict,一个类似与字典的对象,包含了HTTP GET的所有参数对象.方法,下面是实例:- 创建一个views.py文件,写入
get():返回字符串,如果改建有多个值,那么会取出该建的最后一个值
# -*- coding: utf-8 -*-
from django.http import HttpResponse
def test(request):
name = request.GET.get("name")
return HttpResponse('you name is : {}'.format(name))
- 修改urls.py文件
#-*- coding: utf-8 -*-
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()没有获取到值
现在进行传参,访问127.0.0.1:8000/test/?name=zhangsan,使用?添加传入参数

使用postman使用GET方式进行调用

数据类型同样是QueryDict,包含了HTTP POST的所有参数,POST常用于form表单,form表单里的标签name属性对应参数的键,而value属性对应参数的值
取值格式为对象.方法,下面是实例:
- 修改views.py文件
# -*- coding: utf-8 -*-
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 针对提交的请求有校验,所以需要在视图函数之前添加装饰器
postman使用POST方式进行调用
- 修改views.py文件
# -*- coding: utf-8 -*-
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方式
直接访问,查看终端输出

使用postman访问,传入name参数,查看终端输出


name参数- 修改views.py文件
# -*- coding: utf-8 -*-
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方式,查看终端

- 修改views.py文件
# -*- coding: utf-8 -*-
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()
- render()
- redirect()
def runoob(request):
return HttpResponse("菜鸟教程")

# -*- coding: utf-8 -*-
from django.http import HttpResponse
def test(request):
return HttpResponse("Baidu")

render()方法参数:
render(request, template_name, context=None, content_type=None, status=None, using=None)
- 1
request:必要参数,浏览器向服务器发送的请求对象,包含用户信息、请求内容、请求方式等template_name:必要参数,设置模板文件名,用于生成网页内容context:对模板上下文即模板变量赋值,以字典格式表示,默认情况下是一个空字典content_type:响应内容的数据格式,一般情况下使用默认值即可status:HTTP状态码,默认是200using:设置模板引擎,用于解析模板文件、生成网页内容等
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from django.shortcuts import render
def test(request):
name = "Test"
return render(request,"test.html",{"name":name})

- 修改urls.py路由文件
#-*- coding: utf-8 -*-
from django.urls import path
from . import views
urlpatterns = [
path('test/',views.test),
path('index/',views.index), #添加新路径
]
- 修改views.py
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from django.shortcuts import redirect
def test(request):
return redirect("/index/") #跳转到index
def index(request):
return HttpResponse("hello world!!")


注意:render和redirect是在HttpResponse的基础上进行了封装,具体为:
render:底层返回的是HttpResponse对象
redirect:底层继承的是HttpResponse对象
终端输出,可以看到跳转重定向