Django view 视图

本文详细介绍了HTTP请求的八种方法,包括GET、POST、PUT、HEAD、DELETE、TRACE、OPTIONS和CONNECT,解释了每种方法的功能和使用场景,并探讨了如何在Django框架中处理这些请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • request.method 判断请求方式 8种
    GET : 获取一个页面

      POST:       提交数据
    
      PUT :       上传
    
      HEAD:           不用上传就获取数据
    
      DELETE:         删除 Request-URL 标识的
    
      TRACE:          回显服务器收到的请求
    
      OPTIONS:    测试服务器功能是否正常
    
      CONNECT:    将链接改为管道方式
    
    常用 GET  POST 请求
    
      request.POST      form表单提交POST请求传递的数据    获得一个{}   取值方式 []  get()
    
      request.GET         URL地址上的参数   获得一个{}   取值方式 []   get()

request 相关方法

   request.method           -->> 判断请求方式
   request.POST             -->> form表单提交POST请求传递的数据    获得一个{}   取值方式 []  get()
   request.GET              -->> URL地址上的参数   获得一个{}   取值方式 []   get()
   request.path_info            -->> 获取当前请求的路径 不包含参数
   request.get_full_path()       -->> 获取当前请求的路径 含参数
   request.get_host()       -->> 获取请求主机的 ip地址及端口号
   request.body                 -->> 请求体 byte类型 request.POST就是从 body 中提取的
   request.COOKIES              -->> 获取所有的 cookies 字典形式
   request.META                 -->> 获取所有的HTTP头部信息  是一个字典
   request.session              -->> 获取一个可读又可写 的 类似字典的 对象
   request.is_secure()          -->> 判断请求是否安全
   request.is_ajax()            -->> 判断是否是 ajax 请求
   request.get_signet_cookies(key,salt='盐') -->> 获取假眼的 cookies 字典形式
   request.FILES      -->>  上传的文件  
    1. enctype  = 'multipart/form-data'
    2. method ='post'    name   {% csrf_token %}
    3. 文件对象的方法  chunks()
   
  • Response
    1. HttpResponse('字符串') ——》 字符串
    2. render(request,'模板文件名',{k1:v1}) ——》完整的页面
    3. redirect(‘要跳转的地址’) ——》 重定向 响应头: Location:url
    1. ret = HttpResponse(‘’) ret['Location:'] = url
    4. JosnResponse({}) Content-Type : application/json
    1. 序列化非字典类型时: safe=False

    JsonResponse
    传递 json 类型的 数据
    from django.http import JsonResponse

    def json_test(request):
        data = {'name': 'alex', 'pwd': 'alexdsb'}
    
        return JsonResponse(data)  # Content-Type: application/json
        # return HttpResponse(json.dumps(data), content_type='application/json')  # Content-Type: text/html; charset=utf-8

    返回值

     导入三件套
     from django.shortcuts import render, redirect, HttpResponse, reverse
    
     redirect(reverse('/index/')) 重定向  + 反向解析
    
     def login(request):
      return HttpReponse('字符串')        返回一些字符串  
    
     def regist(request):    
      return  render(request,'模板的文件名',{"data":"name"})      返回一个完整的HTML页面
    
     def index(request):
      return redirect('要跳转的地址')       重定向    Location : 地址

4.CBV FBV

  • FBV (function based view ) 写url和函数的对应关系
    from django.shortcuts import render, redirect, HttpResponse
    def login(request):
    err = ''
    if request.method == 'POST':
    name = request.POST.get('name')
    pwd = request.POST.get('pwd')
    if name == 'root' and 'pwd' == '123':
    return HttpResponse('登录成功')
    err = '账号或密码错误'
    return render(request,'login.html',{'err':err})
  • CBV (class based view) 写url和类的对应关系
    from django.views import View
    import time
    class Index(View):

        # 重写 父类的 dispatch 方法  计算执行时间  
        def dispatch(self, request, *args, **kwargs):
            # 操作
            # start = time.time()
          ret = super().dispatch(request, *args, **kwargs)
            # end = time.time()
            # print('时间:{}'.format(end - start))
            # 操作
            return ret
    
      # GET 请求
        def get(self, request):
          return render(request,'index.html')
      # POST 请求
        def post(self, request):
    
          data = request.POST.get('data')
          print(data)
          return self.get(request)
  • CBV 的流程
    CBV的流程:

    1. AddPub.as_view()执行 ——》  view函数
    2. 请求到来的时候执行view函数:
       1. self   = AddPub(*)
       2. self.request = request 
       3. 执行self.dispatch(request,)    ——》如果AddPub定义了dispatch方法,执行自己的,没有执行父类的
          1. 判断请求方式  http_method_names
          2. 允许的话:
             1. 通过反射获取对应请求方式(get/post)的方法  ——》handler
          3. 不允许:
             1.     http_method_not_allowed ——》 handler
          4. 执行handler  ——》 拿到HttpResponse对象

转载于:https://www.cnblogs.com/zhang-zi-yi/p/10158897.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值