HttpResponse和HttpResquest
2018-09-29 本文已影响0人
fly5
一、HttpRequest对象
- 概述
服务器接受到客户请求后,系统自动创建的对象(视图函数第一个参数)
- 属性
path 请求路径
method 请求方法
GET get请求参数
POST post请求参数
FILES 上传文件
COOKIES cookie对象【会话技术】
SESSION session对象【会话技术】
- GET请求
name = request.GET.get("name")
- POST请求
name = request.POST.get('name'),
二、HttpResponse对象
- 概述
用于返回数据给客户端的,
- HttpResponse对象
response = HttpResponse("hello")
response = HttpResponse("hello", status=200)
- render()
response = render(request, "index.html")
response = render(request, "index.html", status=301)
- redirect()
response = redirect("/meituan/")
- JsonResponse()
response = JsonResponse(stu)
三、会话技术
- 概述
HTTP 无状态 [请求一次,返回对应响应,称为一次会话]
会话技术: 实现状态保持
为什么要使用会话保持?
在一定时间段或操作中,跟踪请求者状态【服务器就知道你是谁】
类比:github HTTP每次操作都需要输入用户和密码【服务器才知道你是谁】
- 会话技术
cookie:客户端会话技术
session:服务器会话技术(要依托cookie)
token:手动sesslon
- cookie
- 创建响应 response = HttpResponse()
- 设置cookie response.set_cookie(key,value)
- 获取cookie request.COOKIE.get(key, defaultvalue=None)
- 删除cookie response.delete_cookie(key)
- 设置过期时间
max_age=0 # 默认(浏览器关闭失效)
max_age=None # 永不失效
max_age=num # num秒后失效
expires=timedelta(days=1) # 一天后过期
- session
# 如果要使用session会话技术,需要在settings.py中设置
# MIDDELEWARE 添加 (默认已添加)
- 设置session
request.session[key] = value
- 获取session
request.session.get(key)
- 删除session
# 方式一: sessionid标识存储在cookie
response = redirect("/meituan/")
response.delete_cookie("sessionid")
# 方式二: session服务端会话技术
del request.session["username"]
# 方式三:同时删除cookie和session
response = redirect(reverse("meituan:index"))
request.session.flush()
- 设置超时
request.session.set_expire(30)
- token
在models.py中加入:
token = models.CharField(max_length=100, null=True, default='')
# token 唯一标识
# 时间戳 + 随机数 + 公司域名 + IP
# 时间戳 + 域名
def generate_token():
token = str(time.time()) + str(random.random())
md5 = haslib.md5()
md5.update(token.encode('utf-8'))
return md5.hexdigest()
user.token = generate_token()
user.save()
# 将token给客户端
response.set_cookie("utoken", user.token)
# 删除token
response.delete_cookie("utoken")
- MD5加密
def password_sec(password):
md5 = hashlib.md5()
md5.update(password.encode('utf-8'))
return md5.hexdigest()