常用来从指定地址请求数据;如果需要在请求时提交某些数据,则以路由形式传递参数
- get请求可被浏览器缓存,保存在历史记录中
- get不应在使用敏感数据时使用,明文包路在请求地址中
- get有长度限制
解析get请求我们用到的是request. GET.get(变量名)
def hanshu2(request):
# 解析get参数
page = request.GET.get('page')
size = request.GET.get('size')
qq= request.GET.get('qq')
return HttpResponse(f"解析get请求,page={page},size={size},qq={qq}")
request.GET是一个类似字典的数据类型
如果定义了如上所示的视图函数,那么访问连接时,我们可以通过路由传参
http://127.0.0.1:8000/?qq=10&page=11&size=66 #注意 如果我们这边想要用get解析多个请求 在?号后面写 用&进行连接POST请求方式
- post请求不会被浏览器缓存
- post提交数据长度无限制
- post比get更加安全
获取用户以post形式提交的数据并保存在后台,为类字典数据,这里和request.GET是一个东西
在网页中我们一边通过gtml表单进行数据的提交,POST方式可以提交空数据
我们先弄一个html页面
表单页面
{# action 请求地址 method请求方式#}
注意:在模板页面中一点设计到了表单提交,那么一定要注意在表单区域添加{% csrf_token %}标签行防跨站令牌的加载,否则表单数据将被认为是无效的
或者在设置把这一行代码注释掉
这边写一个视图函数用来捕获当前表单使用POST形式提交的数据:
1.先获取表单页面然后进行路由配置
def ff(request): # 获取表单页面
return render(request,'form.html')
2.写一个视图获取数据
def postt(request):
user = request.POST.get('user')
pwd = request.POST.get('pwd')
return HttpResponse(f'解析post请求,user={user},pwd={pwd}')
#注意我这边的user和pwd 在表单页面给账号和密码设置的name名字是一样的 代表我要获取的是账号和密码
如果在表单页面中账号填写为 test,密码为 123456;在视图函数中捕捉到的结果为:
user=test,pwd=123456
如果说POST请求处理表单多值提交 request.POST.get 是有问题的 这边应该使用getlist函数
视图响应HTTPResponse
一个视图的返回值经常是为了向用户返回一个HttpResponse响应,有如下常用的可以返回HttpResponse的函数
from django.http import HttpResponse HttpResponse(content=b'') # 返回一个字符串内容
render
from django.shortcuts import render render(request,template_name,context=None,content_type=None,status=None) # 返回一个可渲染 HTML 页面,状态码为 200 ''' request: 固定参数,响应的 request 请求,来自于参数部分接收的 HttpRequest template_name: 返回的模板页面路径 context: 模板页面渲染所需的数据,默认为字典格式 content_type: 生成之后的结果使用的 MIME 类型 status: 响应的状态码,默认为 200 '''重定向概念及redirect
from django.shortcuts import render,redirect
这边可以定义两个视图
重定向概念:
什么意思呢 假如我想要买奶茶的话,来到第一个视图因为奶茶店开门了我就可以买到奶茶, 如果我来到第二个视图显示没开门,我就需要重新定向到第一个视图去买。
def Red(request):
return HttpResponse("奶茶店开门了可以买到奶茶")
def Red2(request):
print('奶茶店没开门,重定向到另一个奶茶店')
return redirect('/red1/')
CBV类视图
**CBV(class base views)**就是在视图里使用类处理请求
之前的代码中,我们的视图函数都是通过函数来进行request的响应以及response的返回,并且通常我们需要判断的请求方式get或是post都需要我们在代码中通过if进行条件判断,这样的视图功能编写就叫做FBV
但现在在django中还提供了一种方式叫做CBV,在类中编写视图功能, 并且将传统的get、post判断设置为了类中函数,这样当用户发起不同的请求,会自动进入到对应的类中函数上,像是下面这样
from django.views import View #导入视图
class Cdv(View):
#用请求方式定义函数
def get(self,request):
return HttpResponse("GET请求处理")
def post(self,request):
return HttpResponse("POST请求管理")
如果判断是get请求的话 就会在页面输出‘get请求处理’
CBV隐射原理用户访问时,会经由View基类中的as_view -> dispatch进行判断,通过请求类型分发到不同对应请求的函数名下;也就是通过get方式访问,那么对应会调用到名为get的函数
通过将请求类型定义为函数,可以更加方便进行请求方式判断



