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用视图这个概念封装处理用户请求并返回响应的逻辑。定义视图函数相关的URL(网址) (即规...
    EndEvent阅读 1,739评论 0 2
  • Session流程图 应用 对于敏感、重要的信息,建议要储在服务器端,不能存储在浏览器中,如用户名、余额、等级、验...
    IT的咸鱼阅读 956评论 0 1
  • 模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。软件设计中通常用耦合度和内聚...
    riverstation阅读 2,096评论 0 8
  • 状态保持 http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态 客户端与服务器端的一次通信,就...
    lyh165阅读 201评论 0 0
  • 遇见一个打着油纸伞的姑娘。
    路灯不比星星亮阅读 147评论 0 1