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)
代码
原文地址:https://www.cnblogs.com/Mryang123/p/10277030.html