django的request请求属性和方法

http请求包含

  • 请求首行:GET / HTTP/1.1

  

  • 请求头:在浏览器中request headers
  • 请求体
    • get请求时没有请求体,请求的内容显示在路径的后面:http://ip:端口/路径?请求内容
    • post请求时才会有请求体

获取请求方式

  • request.method:在视图函数中可以获取请求方式(浏览器发起请求)

  

获取请求体数据

  • 只有当post请求时才会有请求体数据(利用postman进行请求)
  • post请求数据常用的两种格式x-www-form-rulencoded和raw的json格式

  注:这里用postman模拟浏览器发送请求,在请求体中输入请求内容,选择x-www-form-rulencoded格式

  • request.body:获取请求体数据
    from django.shortcuts import render,HttpResponse
    
    def login(request):
        # 获取请求数据
        print(request.body) 
        return HttpResponse("ok")
    • x-www-form-rulencoded格式
      • 获取到的请求体数据格式为:b'users=xialiang&pwd=123456'
    • raw的json格式
      • 获取到的b'{"users":"xialiang","pwd":123456}'
  • request.POTS:获取post请求数据
    from django.shortcuts import render,HttpResponse
    
    def login(request):
        # 获取请求数据
        print(request.POST) 
        return HttpResponse("ok")
    • x-www-form-rulencoded格式
      • 获取到的请求数据为:<QueryDict: {'users': ['xialiang'], 'pwd': ['123456']}>
      • 这时想得到请求数据直接可以使用字典的格式进行使用,例如下面示例:
        def login(request):
            # 获取请求数据
            print(request.POST) # <QueryDict: {'users': ['xialiang'], 'pwd': ['123456']}>
            user = request.POST.get("users")
            pwd = request.POST.get("pwd")
            print(user,pwd)    # xialiang 123456
            return HttpResponse("ok")
        注:上面是示例就可以直接获取到数据直接使用
      • 当请求数据中如:爱好有篮球、足球等,用request.POST.get()时,这时只能取到列表中的最后一个值,例如:
        • postman发送的请求数据,如图:
        • 用request.POST.get("hibby"),只能获取到最后列表中的最后一个值
          from django.shortcuts import render,HttpResponse
          def login(request): 
              # 获取请求数据
              print(request.POST)  # <QueryDict: {'hibby': ['篮球', '足球']}>
              hibby = request.POST.get("hibby")
              print(hibby)    # 足球
              return HttpResponse("ok")
        • 上面只能获取到足球,但是爱好有两个,这时request.POST.getlist("hibby")就可以获取到两个值了:['篮球', '足球']
    • raw的json格式
      • 获取到的请求数据为空:<QueryDict: {}>
      • 用json格式请求数据用request.POTS请求到的为空,但是又需要用到里面的数据怎么办?
        • 先获取请求体中的数据request.bogy
        • 然后再把获取到的请求体数据进行decode变为一个字符串
        • 最后进行一个反序列化,这样就可以取值了
  • request.GET:获取GET请求数据
    • 当获取GET请求数据时,如果发送的请求为post请求时,获取到的数据为空
    • 当获取GET请求数据时,发送的请求为GET请求时,才能获取到数据
      • postman中GET请求数据
      • 视图函数中获取GET请求数据
        from django.shortcuts import render,HttpResponse
        def login(request): 
            # 获取请求数据
            print(request.GET)  # <QueryDict: {'user': ['xialiang'], 'pwd': ['123456']}>
            user = request.GET.get("user")
            pwd = request.GET.get("pwd")
            print(user,pwd)    # xialiang 123456
            return HttpResponse("ok")

         

获取请求头数据

  • request.META:获取到请求头中所有的信息(这里有点多就不粘贴出来了),按照一个字典的格式进行存放

  

  • 由于这里请求头存放的为字典格式,所以可以直接从里面去想要的数据,如想要获取请求的ip和端口
    from django.shortcuts import render,HttpResponse
    
    def login(request):
        # 获取请求头数据
        print(request.META.get("HTTP_HOST"))    # 127.0.0.1:8000
        return HttpResponse("ok")

    注:想要获取请求头中的某个值,在获取到的请求头数据中获取就可以了

posted @ 2022-12-01 22:05  A熙  阅读(383)  评论(0)    收藏  举报