一、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)
- rander
response = render (request,'index.html')
response = render (request,'index.html',status=301)
- redirect()
response = redirect('/meituan/')
- JsonResopnse()
stu = {'name':'Tom','age':20}
response = JsonResponse(stu)
三、会话技术
- 概述
HTTP 无状态 :请求一次,返回对应的响应,称为一次会话
会话技术:实现状态保持
为什么要使用会话保持?
在一定时间段或操作中,跟踪请求者状态![服务器就知道你是谁]
github HTTP,没操作都需要输入用户和密码[服务器才知道你是谁]
- 会话技术
cookie :客户端会话技术
session:服务器会话技术(依托cookie)
token:手动session
四、会话技术
- cookie会话技术
设置cookie
max_age = 0 默认(浏览器关闭失效)
max_age = None (永不过期)
max_age = num (过期时间,单位秒)
response.set_cookie('username',user.u_name,max_age = 3600 * 24 * 3)
获取cookie
request.COOKIE.get(key, defaultvalue=None)
删除cookie
response.delete_cookie(key)
- session会话技术
启用session
在settings文件中(默认是已经启用)
INSTALLED_APPS: 'django.contrib.sessions',
MIDDLEWARE: 'django.contrib.sessions.middleware.SessionMiddleware',
设置session
request.session['username'] = user.u_name
获取session
username = request.session.get(user.u_name)
删除session
方式一:sessionid标识存储在cookie
request.delete_cookie('sessionid')
方式二:session 服务端会话技术
del request.session[username]
方式三:同时删除cookie和sesion
request.session.flush()
设置过期时间(默认有效时间是两周)
set_expiry(value)
value是整数(秒数): request.session.set_expiry(10)
value是时间对象
value是0: 关闭浏览器时失效
value是None: 永不过期
存储session的位置
- 数据库
默认存储在数据库中,在settings.py中添加
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
- 缓存
只存储在本地内容中,如果丢失不能找回,但速度会比在数据库中快
SESSION_ENGINE = django.contrib.sessions.backends.cache'
- 数据库和缓存
有限从本地缓存中读取,读取不到再去数据库中获取
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'
使用redis缓存session
-安装redis: pip3 install django-redis-sessions
- 在settings.py中添加
# redis服务相关信息 SESSION_ENGINE = 'redis_sessions.session'
SESSION_REDIS_HOST = 'localhost'
SESSION_REDIS_PORT = 6379
SESSION_REDIS_DB = 0 # 选择数据库
SESSION_REDIS_PASSWORD = '123456' #
如果没有密码,则不需要
SESSION_REDIS_PREFIX = 'session' # 前缀
- 使用时还需要启动redis
redis-server
- token会话技术
在models.py中生成token
token = models.CharField(max_length=100, null=Ture, default='')
MD5加密函数
def password_sec(password):
md5 = hashlib.md5()
md5.update(password.encode('utf-8'))
return md5.hexdigest()
tokeen 唯一标识
def generate_token():
token = str(time.time())+str(random.random)
md5 = hashlib.md5()
md5.update(token.encode('utf-8'))
return md5.hexdigest()
将token给客户端
response.set_cookie('utoken',user.token)
获取token
token = request.COOKIES.get('token')
删除token
response.delete_cookie('token')