• 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)
    代码
  • 相关阅读:
    Flutter form 的表单 input
    FloatingActionButton 实现类似 闲鱼 App 底部导航凸起按钮
    Flutter 中的常见的按钮组件 以及自 定义按钮组件
    Drawer 侧边栏、以及侧边栏内 容布局
    AppBar 自定义顶部导航按钮 图标、颜色 以及 TabBar 定义顶部 Tab 切换 通过TabController 定义TabBar
    清空路由 路由替换 返回到根路由
    应对ubuntu linux图形界面卡住的方法
    [转] 一块赚零花钱
    [转]在树莓派上搭建LAMP服务
    ssh保持连接
  • 原文地址:https://www.cnblogs.com/Mryang123/p/10277030.html
Copyright © 2020-2023  润新知