首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Django框架视图详解

Django使用视图这个概念来负责 处理用户请求和返回响应的逻辑部分。

视图函数或者视图简单理解,就是python的一个函数,专门处理web程序中的业务逻辑部分

视图可以接受用户的请求,并且返回响应给用户的内容,可以响应很多格式内容:例如字符串,html页面,图片等各种形式。

通常情况下,把所有的视图代码都放置在views.py文件内,也可以自定义存放。

在视图函数中最重要的是 关于用户请求和响应。

请求对象 request

request 是Django框架根据用户的请求报文封装的一个对象

request 对象对象中包含了所有请求相关的内容

request.path 包含了请求的url路径

request.method 包含了请求的HTTP方法 POST,GET

request.META.get('REMOTE_ADDR')  获取客户端IP

request.GET 类字典对象。包含了GET请求的数据 (后面单独讲)

request.POST 类字典对象。包含了POST请求的数据(后面单独讲)

request.FILES 类字典对象。包了上传的文件对象(后面单独讲)

request.COOKIES 类字典对象。cookie对象(后面单独讲)

GET与POST请求

GET和POST都是HTTP请求的常用方式,除了这两个常用的方法之外还有很多,例如:PUTE,DELETE。。。

GET请求就是在浏览器地址栏位置发起请求或者是a链接发起的请求,通常情况下,请求中所携带的参数会在地址栏位置显示,例如:

HTTP:GET :  http://127.0.0.1:8080/a/b/c?id=1&k=w

上面这个url如果使用的是GET请求,那么在地址栏就会显现请求的参数 id=1&k=w

POST请求一般都是由表单发起的,POST请求时所携带的数据在浏览器地址栏是不可见的。

举例说明GET和POST的区别:

GET和POST如果是快递员,那么GET就是骑电动自行车的快递员,所携带的包裹就是参数,去往的目的地就是请求的地址。这样的话,这个GET快递员所携带的包裹是可见的,相对不安全,并且所携带的包裹数量有限。

POST就是升级版的快递员,骑着电动三轮车的快递员,所以的包裹都放在三轮车的车厢里,包裹是不可见,相对安全,并且所携带的包裹的数量也比电动自行车多。

GET是HTTP的常见请求方式,参数地址栏可见,相对不安全,并且参数数量有限制。

POST是HTTP的常见请求方式,参数地址栏不可见,相对安全,参数的数据长度受服务器限制。

获取GET获取POST请求的数据获取GET请求方式携带的数据:

requets.GET.dict()   可以把所有GET中的键值对获取,形成字典

requets.GET.get(‘key’,None). 获取指定key的值,可以设置默认值

Request.GET['key'].   把GET对象当作字典使用,注意如果key不存在会报错

获取POST请求方式携带的数据:

requets.POST.dict()   可以把所有POST中的键值对获取,形成字典

requets.POST.get(‘key’,None). 获取指定key的值,可以设置默认值

Request.POST['key'].   把POST对象当作字典使用,注意如果key不存在会报错

1.准备HTML模版页面 templates/index.html

GET请求的演示Demo

因此,需要在所以的POST请求中 添加 csrftokn口令进行验证,

-->

{% csrf_token %}

POST请求的演示Demo

2.准备接受请求的视图函数 web/home/views.py

# 显示 html模版页面的视图函数

def index(request):

   return render(request,'index.html')

# 接收HTTP请求的 视图函数

def HttpDemo(request):

   # 获取当前的请求方式

   method = request.method

   if method == 'GET':

       # 接受GET数据

       data = request.GET.dict()

   elif method == 'POST':

       # 接受POST数据

       data = request.POST.dict()

   print(data)

   return HttpResponse(f'当前请求方式:{method},接收的数据是:{data}')

3.准备路由 web/home/urls.py

from django.urls import path,re_path

from . import views

urlpatterns = [

   path('', views.index),

   path('req/info/', views.req_info),

   path('http/demo/',views.HttpDemo,name="HttpDemo")

]响应对象 HttpResponse

1.在Django.http模块中定义了HttpResponse响应对象的API

2.HttpResponse响应对象是由Django框架自动创建,并且由开发者设置具体的响应内容

3.在每一个经过路由解析的视图中必须返回一个HttpResponse响应对象,或者HttpResponse的子对象

1. 直接使用HttpResponse对象返回内容

# web/home/views.py

def index(request):

   return HttpResponse('可以响应任意字符串内容')2.返回模版文件

# web/home/views.py

def index(request):

   # render有三个参数,第一个参数是请求对象,第二个参数是响应模版文件,第三个参数是字典,传递给模版的数据

   love = 'iloveyoutosimida'

   return render(request,'index.html',{'lovestr':love})

# 对应的 index.html中就可以使用 模版引擎的语法来解析传递的数据

# {{ lovestr }}3.直接返回Json数据

def index(request):

   # 可以在视图函数中直接返回 json数据,JsonResponse

   data = {'name':'张三','age':20,'sex':'m'}

   return JsonResponse(data)  # Content-Type: application/json

   # 也可以手动把数据转为json,在使用 HttpResponse进行响应

   # return HttpResponse(json.dumps(data)) # Content-Type: text/html; charset=utf-8

# 但是有区别:Content-Type: application/json   # Content-Type: text/html; charset=utf-84.重定向

重定向 ,服务器端的挑战

可以使用 HttpResponseRedirect,或者简写 redirect

def index(request):

   # 重定向

   # return HttpResponseRedirect('/http/demo/')

   return redirect('/http/demo')

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200610A0LGR300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券