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')
领取专属 10元无门槛券
私享最新 技术干货