Django视图

一、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')

你可能感兴趣的:(Django视图)