06 - Django 视图view

打印 上一主题 下一主题

主题 1632|帖子 1632|积分 4896

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
HttpRequest 和 HttpResponse

Django中的视图主要用来接受Web哀求,并做出响应。
视图的本质就是一个Python中的函数
视图的响应分为两大类

  • 以Json数据情势返回(JsonResponse)
  • 以网页的情势返回

    • 重定向到另一个网页 (HttpResponseRedirect)
    • 错误视图(4XX,5XX) (HttpResponseNotFound, HttpResponseForbidden, HttpResponseNotAllowed 等)

  • 视图响应过程:

    • 浏览器输入-> urls路由匹配 -> 视图响应 -> 回馈到浏览器

  • 视图参数:

    • 一个HttpRequest的实例,一般命名为request
    • 通过ur1正则表达式传递过来的参数

  • 位置:
通常在应用下的views.py中定义

  • 错误视图:

    • 404视图(页面没找到)
    • 400视图(客户操作错误)
    • 500视图(服务器内部错误)

HttpRequest

服务器在接收到Http哀求后,会根据报文创建HttpRequest对象
视图中的第一个参数就是HttpRequest对象
Django框架接收到http哀求之后会将http哀求包装为HttpRequest对象,之后传递给视图。
  1. request常用属性和方法:
  2.   属性:
  3.     path    请求的完整路径
  4.     method  请求的方法,常用GET, POST
  5.     GET     类似字典的参数,包含了get的所有参数
  6.     POST    类似字典的参数,包含了post所有参数
  7.     FILES   类似字典的参数,包含了上传的文件
  8.     COOKIES 字典,包含了所有COOKIE
  9.     session 类似字典,表示会话
  10.     META    一个字典,包含了请求的元信息,例如:
  11.             'REMOTE_ADDR' 客户端的IP地址
  12.   方法:
  13.     is_ajax()    判断是否是ajax请求,通常用在移动端和JS中
  14.     get_full_path()  返回包含参数字符串的请求路径
  15. QueryDict:
  16.   类似字典的对象。与字典的区别:可以存在相同的键。
  17.   QueryDict中数据获取方式:
  18.     dict['uname'] 或 dict.get('uname')    获取指定key对应的第一个值
  19.     dict.getlist('uname')                获取指定key对应的所有值
复制代码
HttpResponse

  1. HttpResponse由程序员自己创建:
  2.   1)不使用模板,直接调用HttpResponse(),返回HttpResponse对象。
  3.   2)调用模板,进行渲染。
  4.     使用render
  5.       render(request, template_name[, context])
  6.       request     请求体对象
  7.       template_name 模板路径
  8.       context   字典参数,用来填坑
  9. 属性:
  10.   content      返回的内容
  11.   charset    编码格式
  12.   status_code  响应状态码(2xx, 3xx, 4xx, 5xx)
  13. 方法:
  14.   write(xxx)      直接写出文本
  15.   flush()       冲刷缓冲区
  16.   set_cookie(key, value='xxx', max_age=None)  设置cookie
  17.   delete_cookie(key)   删除cookie
  18. HttpResponse子类
  19.   HttpResponseRedirect
  20.     响应重定向:可以实现服务器内部跳转
  21.     return HttpResponseRedirect('/grade/2030')
  22.     使用的时候推荐使用反向解析
  23.   JsonResponse
  24.     返回Json数据的请求,通常用在异步请求上
  25.       JsonResponse(dict)
  26.       返回json数据时, Content-type是application/json
复制代码
views.py

  1. from django.http import HttpResponse, HttpResponseRedirect, JsonResponse
  2. from django.shortcuts import redirect, render
  3. # Create your views here.
  4. def myrequest(request):
  5.     print(request)  # <WSGIRequest: GET '/request/?name=lisi&age=18'>
  6.     # request对象的属性和方法
  7.     print(request.method)  # GET / POST/ PUT/ DELETE
  8.     print(request.GET)  # QueryDict对象(类字典对象,可以使用字典方法),包含GET请求参数
  9.     print(request.GET['name'])  # 如果name不存在,会报错
  10.     print( request.GET.get('name'))  # 如果name不存在,返回None或者默认值
  11.     print(request.GET.getlist('name'))  # 如果name不存在,返回空列表, 否则返回列表
  12.     print(request.POST)  # QueryDict对象,包含POST请求参数
  13.    
  14.     print(request.path)  # 请求路径/request/
  15.     print(request.get_full_path())  # 请求完整路径 (包含查询字符串)/request/?name=lisi&age=18
  16.     print(request.COOKIES)  # 字典对象,包含cookie信息
  17.     print(request.session)  # 字典对象,包含session信息
  18.     print(request.FILES) # 如果是上传文件,返回一个文件对象,否则返回None,前端上传的文件
  19.     # print(request.META) # 字典对象,包含HTTP请求头信息
  20.     print(request.META['REMOTE_ADDR'])
  21.     return HttpResponse("Hello Django!")
  22. def myresponse(request):
  23.     # 1. 直接返回字符串
  24.     # return HttpResponse("Hello Django!")
  25.     # 2. 传入模板文件, 前后端不分离
  26.     # return render(request, 'index.html')
  27.     # 3. 重定向, redirect, reverse
  28.     # return redirect('/request/')
  29.     # return HttpResponseRedirect('/request/')
  30.     # 4. 返回json数据, 前后端分离的方式
  31.     # data = {'name': 'lisi', 'age': 18}
  32.     # return JsonResponse(data)
  33.     response = HttpResponse()
  34.     response.content = 'Hello Django!'
  35.     response.status_code = 200
  36.     return response
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

涛声依旧在

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表