zoukankan      html  css  js  c++  java
  • Django---请求、响应

    Django的请求和响应

    一、客户端向服务器的请求简介

    二、响应对象构造

    回到顶部

    一、客户端向服务器的请求简介

      1.c-->s的传参的4中途径 

      • 提取的URL的特定部分,如/天气/北京/ 2018,可以在服务器端的路由中用正则表达式截取;
      • 查询字符串(查询字符串),形如key1 = value1&key2 = value2;
      • 请求体(主体)中发送的数据,比如表单数据,JSON,XML;
      • 在HTTP报文的头(报头)中。

      2.传参途径的接受方式

        1. 通过url地址传递参数

          例如:在子路由request_rout中,urls中设置  url(r'^weather/(?P<city>[a-z]+)/(?P<year>d{4})/$', views.weather),

    def weather(request, year, city):
        print('city=%s' % city)
        print('year=%s' % year)
        return HttpResponse('OK')
    request_rout/views

        2. 通过查询字符串传递参数  

    # 演示从查询字符串中提取参数
    # /query/?a=1&b=2&c=3
    # flask: request.args
    # dhango: request.GET -> QueryDict类的对象,类似于字典
    def query_data(request):
        a = request.GET.get('a')
        b = request.GET.get('b')
        c = request.GET.get('c')
    
        c_list = request.GET.getlist('c') # list
        print(c_list)
        return HttpResponse("OK")
    request_rout/views

        3. 通过请求体传递数据

          3.1post表单提交数据

    # 演示获取post表单提交的数据
    # /form/
    # flask: request.form
    # dhango: request.POST -> QueryDict类的对象,类似于字典
    def form_data(request):
        name = request.POST.get('name')
        age = request.POST.get('age')
        print(name)
        print(age)
        return HttpResponse('OK')
    request_rout/views

          3.2json数据

    # 演示获取json数据
    # /json/
    # flask: request.json
    # dhango: request.body -> QueryDict类的对象,类似于字典
    def json_data(request):
        req_data = request.body  # 获取请求体原始数据 bytes
    
        # 将bytes转换成str
        json_str = req_data.decode()
    
        # 将json字符转为字典
        req_dict = json.loads(json_str)
    
        # 取出年龄和名字
        name = req_dict.get('name')
        age = req_dict.get('age')
    
        print(name)
        print(age)
    
        return HttpResponse('OK')
    request_rout/views

        4. 通过请求头传递数据(request.META)

    def get_headers(request):
        print(request.META['CONTENT_TYPE'])
        return HttpResponse('OK')
    request_rout/views
    CONTENT_LENGTH - 请求正文的长度(作为字符串)。
    CONTENT_TYPE - 请求正文的MIME类型。
    HTTP_ACCEPT - 响应的可接受内容类型。
    HTTP_ACCEPT_ENCODING - 可接受的响应编码。
    HTTP_ACCEPT_LANGUAGE - 响应的可接受语言。
    HTTP_HOST - 客户端发送的HTTP主机头。
    HTTP_REFERER - 引用页面,如果有的话。
    HTTP_USER_AGENT - 客户端的用户代理字符串。
    QUERY_STRING - 查询字符串,作为单个(未解析的)字符串。
    REMOTE_ADDR - 客户端的IP地址。
    REMOTE_HOST - 客户端的主机名。
    REMOTE_USER - Web服务器验证的用户(如果有)。
    REQUEST_METHOD- 一个字符串,如"GET""POST"。
    SERVER_NAME - 服务器的主机名。
    SERVER_PORT - 服务器的端口(作为字符串)。
    请求头常见值

      3.Django中的QueryDict对象

        1.HttpRequest对象的属性GET,POST都是的QueryDict类型的对象,QueryDict类型的对象用来处理同一个键带有多个值的情况

      

       2.得到value值的方法

         2.1方法得到():根据键获取值

        如果一个键同时拥有多个值将获取最后一个值

        如果键不存在则返回无值,可以设置默认值进行后续处理

     dict.get('键',默认值) 可简写为 dict['键']

        2.2方法的GetList():根据键获取值,值以列表返回,可以获取指定键的所有值

        如果键不存在则返回空列表[],可以设置默认值进行后续处理

     dict.getlist('键',默认值)

    二、响应对象构造

      1.返回HttpResponse类的对象或其子类的对象

        1.1格式

          response = HttpResponse('<响应体>', content_type='<响应数据类型>',  status='<响应状态码>')

                         res_http['name'] = 'yang' 

    # 演示构造响应对象
    # /get_response/
    def get_response(request):
        res_http = HttpResponse("response_body", content_type='text/html',status=200)
        res_http['name'] = 'yang'
        return res_http
    代码

      2.响应时返回json数据 

    # 演示响应时返回json数据
    # /get_json/
    # flask: jsonify
    # Dhango: JsonResponse(<dict>)
    def get_json(request):
        res_dict = {
            "name" : "yang",
            "age" : 12
        }
    
        return JsonResponse(res_dict)
    代码

      3.响应时进行页面重定向

    # 演示响应时进行页面重定向
    # /redirect_test
    # flask和django相同
    # redirect('url地址')
    def redirect_test(request):
        # 重定向首页
        req_url = reverse('users:index')
        print(req_url)
        return redirect(req_url)
    代码
  • 相关阅读:
    异常[PersistenceUnit: default] Unable to build Hibernate SessionFactory
    关于本地模块安装入maven仓库出现的异常
    dwd面试记录与最近面试的一些感想。
    java编程思想第九章接口
    java编程思想第八章多态
    微服务调用本地测试与外部测试的差异
    Java编程思想第七章复用类
    Gson的学习与使用
    为什么会有这个分类?
    Spark 2.1.1 源码编译
  • 原文地址:https://www.cnblogs.com/Mryang123/p/10277030.html
Copyright © 2011-2022 走看看