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)

代码

Django---请求、响应的更多相关文章

  1. Django请求响应对象

    请求与响应对象 HttpRequest HttpRequest存储了客户请求的相关参数和一些查询方法. path 请求页面的全路径,不包括域名-例如, "/hello/". met ...

  2. DRF对Django请求响应做了技术升级

    Django视图是用来处理请求和响应的,Django默认是按Form和Template来设计的,如果要处理以JSON格式为主的RESTful API,那么就需要对Django请求和响应的处理代码进行优 ...

  3. Django请求,响应,ajax以及CSRF问题

    二.request对象常用属性: Attribute Description path 请求页面的全路径,不包括域名端口参数.例如: /users/index method 一个全大写的字符串,表示请 ...

  4. Django(十一)请求生命周期之响应内容(请求/响应 头/体)

    https://www.cnblogs.com/renpingsheng/p/7534897.html Django请求生命周期之响应内容 http提交数据的方式有"post",& ...

  5. Django请求生命周期之响应内容

    Django请求生命周期: 1.发送http请求2.服务器接受,根据请求头中的url在路由关系表中进行匹配(从上到下)3.匹配成功后,执行指定的views函数 URL -> 函数 ==>F ...

  6. django请求的生命周期

    1. 概述 首先我们知道HTTP请求及服务端响应中传输的所有数据都是字符串. 在Django中,当我们访问一个的url时,会通过路由匹配进入相应的html网页中. Django的请求生命周期是指当用户 ...

  7. python---django请求-响应的生命周期(FBV和CBV含义)

    Django请求的生命周期是指:当用户在访问该url路径是,在服务器Django后台都发生了什么. 客户端发送Http请求给服务端,Http请求是一堆字符串,其内容是: 访问:http://crm.o ...

  8. 第一篇 Flask基础篇之(配置文件,路由系统,模板,请求响应,session&cookie)

    Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...

  9. Django组件 - Django请求生命周期、中间件

    一.Django请求生命周期 在学习中间件之前,先了解一下Django的请求生命周期,如下图: 1)client代表浏览器,浏览器内部为我们封装了socket,Django的WSGI模块也封装了soc ...

  10. 由django请求生命周期延伸出的知识点大总结

    django项目搭建见: https://www.cnblogs.com/dongxixi/p/10981577.html django请求生命周期图: 由浏览器发起请求开始 知识点1: 浏览器与服务 ...

随机推荐

  1. 论http弥补技术ajax、comet、SPADY、websocket

    为什么要弥补http?http有什么缺陷? 查询资料中

  2. 百度地图api文档实现任意两点之间的最短路线规划

    两个点之间的路线是使用“Marker”点连接起来的,目前还没找到改变点颜色的方法,测试过使用setStyle没有效果. <html><head> <meta http-e ...

  3. Jmeter_24个常用函数

    JMeter提供了很多函数,如果能够熟练使用,可以为脚本带来很多方便. JMeter函数是一种特殊值,可用于除测试计划外的任何组件. 函数调用的格式如下所示:${__functionName(var1 ...

  4. yagmail 实现发邮件

    yagmail 实现发邮件 yagmail 可以更简单的来实现自动发邮件功能. github项目地址: https://github.com/kootenpv/yagmail 安装 pip insta ...

  5. synchronized 是可重入锁吗?为什么?

    什么是可重入锁? 关于什么是可重入锁,我们先来看一段维基百科的定义. 若一个程序或子程序可以“在任意时刻被中断然后操作系统调度执行另外一段代码,这段代码又调用了该子程序不会出错”,则称其为可重入(re ...

  6. Java Web项目漏洞:检测到目标URL存在http host头攻击漏洞解决办法

    检测到目标URL存在http host头攻击漏洞 详细描述 为了方便的获得网站域名,开发人员一般依赖于HTTP Host header.例如,在php里用_SERVER["HTTP_HOST ...

  7. 学习使人快乐5-JavaWeb应用的组成结构

    开发JavaWeb应用时,不同类型的文件有严格的存放规则,否则不仅可能会使web应用无法访问,还会导致web服务器启动报错 WebRoot →Web应用所在目录,一般情况下虚拟目录要配置到此文件夹当中 ...

  8. Problem J. Journey with Pigs

    Problem J. Journey with Pigshttp://codeforces.com/gym/241680/problem/J考察排序不等式算出来单位重量在每个村庄的收益,然后生序排列猪 ...

  9. SQL server 使用 内联结(INNER JOIN) 联结多个表 (以及过滤条件 WHERE, AND使用区别)

    INNER JOIN ……ON的语法格式: FROM (((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号) INN ...

  10. React(四)组件生命周期

    组件的生命周期可分成三个状态: Mounting:已插入真实 DOM Updating:正在被重新渲染 Unmounting:已移出真实 DOM 生命周期的方法有: componentWillMoun ...