栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Django初识3

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django初识3

Django视图请求 GET请求处理

常用来从指定地址请求数据;如果需要在请求时提交某些数据,则以路由形式传递参数

  • 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 %} 账号: 密码:

注意:在模板页面中一点设计到了表单提交,那么一定要注意在表单区域添加{% 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的函数

通过将请求类型定义为函数,可以更加方便进行请求方式判断

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/920962.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号