-----请求Requst
1、请求的几种方式:(利用HTTP协议向服务器传参有几种路径)
* 提取URL的特定部分,如/weather/beijing/2018,可以在服务器端的路由中用正则表达式截取;
* 查询字符串(query string),形如key1=value1&key2=value2;
* 请求体(body)中发送的数据,比如表单数据、json、xml;
* 在http报文的头(header)中。

2、URL路径参数
在定义路由URL时,可以使用正则表达式提取参数的方法从URL中获取请求参数,Django会将提取的参数直接传递到视图的传入参数中。
#  未命名参数按定义顺序传递
url(r'^weather/([a-z]+)/(\d{4})/$', views.weather),
def weather(request, city, year):
print('city=%s' % city)
print('year=%s' % year)
return HttpResponse('OK')
#  命名参数按名字传递
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')

3、Django中的QueryDict对象
方法get():根据键获取值
如果一个键同时拥有多个值将获取最后一个值
如果键不存在则返回None值,可以设置默认值进行后续处理
dict.get('键',默认值)
可简写为
dict['键']

方法getlist():根据键获取值,值以列表返回,可以获取指定键的所有值
如果键不存在则返回空列表[],可以设置默认值进行后续处理
dict.getlist('键',默认值)

4、查询字符串Query String
# /qs/?a=1&b=2&a=3
def qs(request):
a = request.GET.get('a')
b = request.GET.get('b')
alist = request.GET.getlist('a')
print(a) # 3
print(b) # 2
print(alist) # ['1', '3']
return HttpResponse('OK')
#  重要:查询字符串不区分请求方式,即假使客户端进行POST方式的请求,依然可以通过request.GET获取请求中的查询字符串数据

5、请求体
Django默认开启了CSRF防护,会对上述请求方式进行CSRF防护验证,在测试时可以关闭CSRF防护机制,方法为在settings.py文件中注释掉CSRF中间件
5-1、表单类型Form Data
#
def get_body(request):
a = request.POST.get('a')
b = request.POST.get('b')
alist = request.POST.getlist('a')
print(a)
print(b)
print(alist)
return HttpResponse('OK')
# 重要:只要请求体的数据是表单类型,无论是哪种请求方式(POST、PUT、PATCH、DELETE),都是使用request.POST来获取请求体的表单数据

5-2、非表单类型 Non-Form Data
import json
def get_body_json(request):
json_str = request.body
req_data = json.loads(json_str)
print(req_data['a'])
print(req_data['b'])
return HttpResponse('OK')

6、请求头
#  可以通过request.META属性获取请求头headers中的数据,request.META为字典类型。
常见的请求头如:
* CONTENT_LENGTH – The length of the request body (as a string).
* CONTENT_TYPE – The MIME type of the request body.
* HTTP_ACCEPT – Acceptable content types for the response.
* HTTP_ACCEPT_ENCODING – Acceptable encodings for the response.
* HTTP_ACCEPT_LANGUAGE – Acceptable languages for the response.
* HTTP_HOST – The HTTP Host header sent by the client.
* HTTP_REFERER – The referring page, if any.
* HTTP_USER_AGENT – The client’s user-agent string.
* QUERY_STRING – The query string, as a single (unparsed) string.
* REMOTE_ADDR – The IP address of the client.
* REMOTE_HOST – The hostname of the client.
* REMOTE_USER – The user authenticated by the Web server, if any.
* REQUEST_METHOD – A string such as "GET" or "POST".
* SERVER_NAME – The hostname of the server.
* SERVER_PORT – The port of the server (as a string).

def get_headers(request):
print(request.META['CONTENT_TYPE'])
return HttpResponse('OK')

7、其他常用HttpRequest对象属性
* method:一个字符串,表示请求使用的HTTP方法,常用值包括:'GET'、'POST'。
* user:请求的用户对象。
* path:一个字符串,表示请求的页面的完整路径,不包含域名和参数部分。
* encoding:一个字符串,表示提交的数据的编码方式。
如果为None则表示使用浏览器的默认设置,一般为utf-8。
这个属性是可写的,可以通过修改它来修改访问表单数据使用的编码,接下来对属性的任何访问将使用新的encoding值。
* FILES:一个类似于字典的对象,包含所有的上传文件。

-----响应Response
视图在接收请求并处理后,必须返回HttpResponse对象或子对象。HttpRequest对象由Django创建,HttpResponse对象由开发人员创建
1、HttpResponse
Response(content=响应体, content_type=响应体数据类型, status=状态码)
也可通过HttpResponse对象属性来设置响应体、响应体数据类型、状态码:
* content:表示返回的内容。
* status_code:返回的HTTP响应状态码。
* content_type:指定返回数据的的MIME类型。

response = Response()
response['Itcast'] = 'Python' # 自定义响应头Itcast, 值为Python

from django.http import HttpResponse
def demo_view(request):
return HttpResponse('itcast python', status=400)
或者
response = HttpResponse('itcast python')
response.status_code = 400
response['Itcast'] = 'Python'
return response

2、HttpResponse子类
* HttpResponseRedirect 301
* HttpResponsePermanentRedirect 302
* HttpResponseNotModified 304
* HttpResponseBadRequest 400
* HttpResponseNotFound 404
* HttpResponseForbidden 403
* HttpResponseNotAllowed 405
* HttpResponseGone 410
* HttpResponseServerError 500

3、JsonResponse
from django.http import JsonResponse
def demo_view(request):
return JsonResponse({'city': 'beijing', 'subject': 'python'})

4、redirect重定向
-----Cookie
Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。Cookie最早是网景公司的前雇员Lou Montulli在1993年3月的发明。Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,这样服务器可以知道该用户是否是合法用户以及是否需要重新登录等。服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型记住用户名。
Cookie是存储在浏览器中的一段纯文本信息,建议不要存储敏感信息如密码,因为电脑上的浏览器可能被其它人使用。

Cookie的特点

* Cookie以键值对的格式进行信息的存储。
* Cookie基于域名安全,不同域名的Cookie是不能互相访问的,如访问itcast.cn时向浏览器中写了Cookie信息,使用同一浏览器访问baidu.com时,无法访问到itcast.cn写的Cookie信息。
* 当浏览器请求某网站时,会将浏览器存储的跟网站相关的所有Cookie信息提交给网站服务器。

1 设置Cookie
HttpResponse.set_cookie(cookie名, value=cookie值, max_age=cookie有效期)
def demo_view(request):
response = HttpResponse('ok')
response.set_cookie('itcast1', 'python1') # 临时cookie
response.set_cookie('itcast2', 'python2', max_age=3600) # 有效期一小时
return response

2 读取Cookie
def demo_view(request):
cookie1 = request.COOKIES.get('itcast1')
print(cookie1)
return HttpResponse('OK')

-----Session
1 启动Session
2 存储方式
在settings.py文件中,可以设置session数据的存储方式,可以保存在数据库、本地缓存等。
2-1 数据库
SESSION_ENGINE='django.contrib.sessions.backends.db'
'django.contrib.sessions' installed_apps 中 安装session应用

2-2 本地存储
SESSION_ENGINE='django.contrib.sessions.backends.cache'
2-3 混合存储
SESSION_ENGINE='django.contrib.sessions.backends.cached_db'
2-4 Redis
2-4-1、安装扩展
pip install django-redis
2-4-2 配置 settings.py 文件中做如下设置
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"

3 Session操作
3-1、 以键值对的格式写session。
request.session['键']=值
3-2 根据键读取值。
request.session.get('键',默认值)
3-3 清除所有session,在存储中删除值部分。
request.session.clear()
3-4 清除session数据,在存储中删除session的整条数据。
request.session.flush()
3-5 删除session中的指定键及值,在存储中只删除某个键及对应的值。
del request.session['键']
3-6 设置session的有效期
request.session.set_expiry(value)
* 如果value是一个整数,session将在value秒没有活动后过期。
* 如果value为0,那么用户session的Cookie将在用户的浏览器关闭时过期。
* 如果value为None,那么session有效期将采用系统默认值,默认为两周,可以通过在settings.py中设置SESSION_COOKIE_AGE来设置全局默认值。

转载于:https://www.cnblogs.com/denix-32/p/10024654.html

Django-请求与响应相关推荐

  1. Django请求和响应对象

    Django请求和响应对象 Django 使用请求和响应对象在系统中传递状态. 当一个页面被请求时,Django 会创建一个 HttpRequest 对象,这个对象包含了请求的元数据.然后,Djang ...

  2. django请求和响应

    本文转载自https://blog.csdn.net/xiaogeldx/article/details/88096341 HttpRequest对象 服务器接收到http协议的请求后,会根据报文创建 ...

  3. [Python]Django请求与响应

    前言 系列文章目录 [Python]目录 视频及资料和课件 链接:https://pan.baidu.com/s/1LCv_qyWslwB-MYw56fjbDg?pwd=1234 提取码:1234 文 ...

  4. django请求与响应(HttpRequest对象和HttpResponse对象)

    HttpRequest对象 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象视图函数的第一个参数是HttpRequest对象在django.http模块中定义了HttpReq ...

  5. 自学Python第二十二天- Django框架(一)创建项目、APP、快速上手、请求和响应流程、模板、数据库操作

    Django 框架是一个基于 python 的重量级的 web 开发框架,现今很多大公司大项目都是使用 Django 框架.采用了 MVC(model view controller) 的框架模式,p ...

  6. formdata 接受参数中带有class 对象_Django(五)- 请求与响应 - request对象

    请求对象 一.客户端传参的几种方式 1. 通过URL路径(path)传递,例如:http://127.0.0.1:8000/news/1/2,两个参数:id和page 2. 通过 query stri ...

  7. python的Web框架,Django框架中的请求与响应

    请求与响应 简单流程图 我们先来了解一个请求与响应的大概流程 视图函数接受到的request到底是个什么对象呢? 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象视图函数的第 ...

  8. Django之请求和响应

    所谓请求和响应就是一种对话式或者说应答式的交互过程.请求是值用户使用浏览器通过http协议发送给服务段的数据,响应是值服务端接收到请求后做响应的处理回复给浏览器的数据.常用的方法就是GET,POST, ...

  9. django restful 请求_Django编写RESTful API(二):请求和响应

    前言 在上一篇文章,已经实现了访问指定URL就返回了指定的数据,这也体现了RESTful API的一个理念,每个URL表明着一个资源.固然咱们还知道RESTful API的另外一个特性就是,发送不一样 ...

  10. Django请求响应对象

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

最新文章

  1. 信息安全系统设计基础家庭作业
  2. C++实现大数的乘法
  3. static_cast与c风格的强制类型转换比较
  4. 鸿蒙轻内核定时器Swtmr:不受硬件和数量限制,满足用户需求
  5. (228)FPGA岗位有哪些?
  6. 笨办法学 Python · 续 练习 13:单链表
  7. php集成环境、基础标记符
  8. 5G加速向纵深发展 中国电信联合产业链开展“5G创新终端商用合作行动”
  9. mysql5.5主从复制总结
  10. 响应式Web设计:HTML5和CSS3实战 笔记
  11. NbPreferences使用用户首选项时要注意的问题
  12. 手机版支付宝转账截图生成器Q574651623
  13. 网页版即时通讯聊天工具,支持主流浏览器,无需安装即可使用
  14. 《团队执行力》分享记录
  15. javaweb实现登陆,注册,修改密码,显示信息,修改个人信息功能
  16. 怎样保留应届生身份?应届生的身份有多重要?
  17. 膨胀卷积的缺点_卷积、反卷积与膨胀卷积
  18. 一周学python系列(7)——面向对象
  19. Unity 动态改变Text字体颜色
  20. php pthread nts,PHP的线程库:pthreads

热门文章

  1. 使用sealos安装K8S集群时,需确保节点的swap是关闭的
  2. spark RDD的血缘关系
  3. golang变量定义细节及beego环境搭建细节记录
  4. scala中_下划线的使用
  5. Python3空字符串和len()函数
  6. python现在版本强势英雄_当前版本有哪些强势英雄?
  7. Linux登陆Mariadb数据库,Mariadb数据库的远程连接(centos 7+ Navicat)
  8. Centos7把一个文件复制到另外一台服务器上的scp命令
  9. Qt for Python Mac下使用 fbs 打包软件
  10. 对研发人员很有震撼和启发的公式