12月4日学习内容整理:管理系统中的分页,Session

补充:

1、django没有socket服务期程序,它是采用第三方来实现的,而wsgi协议就是规定了wed服务和应用之间应该怎样配合,所以django必须依赖wsgi才能运作

2、django中的app文件夹:我们可以把针对不同业务逻辑处理的函数写到不同的app文件夹里,分开处理

里面的views.py文件我们可以写对应的函数

里面的models.py文件可以写自己的数据库操作

 

 

一、分页操作

我们可以把分页写成一个独立的文件,每次要用的时候直接拿过来就可以了

补充两个知识点::::

1、绝大多数的网站涉及到页面渲染时都会过滤掉关键字等安全操作(实际上就是全部识别为字符串),否则某个用户评论中带有前端语言当加载页面时就会出问题,如果我们在写模版文件时需要前端识别我们所写的标签,就利用模版语言中safe去掉这种过滤操作

{{ 变量名|safe  }}  这样就会以html形式渲染,否则默认是以字符串格式渲染

2、request.path_info   输出请求的URL链接,但是没有get请求的数据,就是只是单纯的url,没有?后面的数据

 

二、session

1、定义:是保存在服务端的一个个键值对,同时要依赖cookie

2、作用:是为了网络传输中最大可能保障数据的安全,跟带盐的cookie作用是类似的,但是session的安全性更高

3、原理:这里以用户登录验证为例

用户在浏览器输入用户名和密码,发给后端从数据库中提取信息进行验证,验证成功后django会自动生成一个随机字符串(就代表当前用户),将这个随机字符串发给前端,保存在前端的cookie中,前端在发请求时也会发送这个cookie,服务端根据这个随机字符串作为key,我们写入一些当前用户经常用到的数据作为value组成字典,django会把这个字典默认存储在数据库的表中,当用户做其他操作前端发出相应的请求时就会带上cookie中的这个代表当前用户的随机字符串,后端取到这个随机字符串就可以进行判断登录状态,若数据库中存在这个随机字符串就代表当前用户已登录,否则就让用户先登录,已登录时我们就可以取出存在这个随机字符串下的value值也就是代表当前用户的一些基本信息,这样我们就可以进行其它的操作了

 

注意:

》》》django会默认将session存储在数据库中,创建数据库的命名是在django项目的cmd目录下:

python manage.py  makemigrations

python manage.py  migrate  创建出来的表中就有保存session的表

也可以保存在其它地方,文件、缓存、缓存+数据库或者是加密cookie

》》》服务端存储的session中key就是随机字符串,value是对应的数据,比如用户名,ID之类的常用的

 

4、使用

(1)创建session:生成随机字符串并发给前端保存在cookie这些django自己已经做了

request.session[key]=value

(2)取出session:用前端发过来的cookie中的随机字符串进行判断这些django也自己做了,如果对应的value值取不到就代表用户没登陆,这时候就可以在函数中返回跳转登录页面提示用户登录

request.session.get(key)

(3)删除session:django先获取当前用户的随机字符串,再从数据库中把相应的记录删掉

》》》整条删除:del  request.session.delete()

》》》删除某一个值:del  request.session.get(key)

 

5、session的配置信息:写在settings.py中

SESSION_ENGINE = 'django.contrib.sessions.backends.db'   # 引擎(默认)

SESSION_COOKIE_NAME = "sessionid"                       # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
SESSION_COOKIE_PATH = "/"                               # Session的cookie保存的路径(默认)
SESSION_COOKIE_DOMAIN = None                             # Session的cookie保存的域名(默认)
SESSION_COOKIE_SECURE = False                            # 是否Https传输cookie(默认)
SESSION_COOKIE_HTTPONLY = True                           # 是否Session的cookie只支持http传输(默认)
SESSION_COOKIE_AGE = 1209600                             # Session的cookie失效日期(2周)(默认)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False                  # 是否关闭浏览器使得Session过期(默认)
SESSION_SAVE_EVERY_REQUEST = False                       # 是否每次请求都保存Session,默认修改之后才保存(默认)

最后一个参数的意思是:当为true时,每一次发送请求都会服务端都会保存session,而超时时间也会从最后一次刷新时开始计时;当为false时,经过设置的超时时间后session就会失效,无论这期间刷新过多少次都没有影响

 

 

6、session和cookie的区别

》》》session是保存在服务端的一个个键值对,而cookie是保存在浏览器的一个个键值对,保存的地方不一样

》》》session比cookie更安全,因为它只把随机字符串保存在浏览器,这个随机字符串无法解译出任何东西,但是带盐的cookie虽说是加密的,但是通过某些解密手段也可以获取到用户的相关信息

》》》session比cookie服务端的压力要大,因为所有登录用户的信息都要存储在服务端,所以占用服务端的存储空间是很大的。处理起来相对较慢

》》》cookie处理起来更快,因为是浏览器存储,浏览器发送,服务端只要取值判断就可以了

 

 

 

三、补充(老师博客中的)

1、存储在数据库中的使用方法补充

def index(request):
        # 获取、设置、删除Session中数据
        request.session['k1']
        request.session.get('k1',None)
        request.session['k1'] = 123
        request.session.setdefault('k1',123) # 存在则不设置
        del request.session['k1']
 
        # 所有 键、值、键值对
        request.session.keys()
        request.session.values()
        request.session.items()
        request.session.iterkeys()
        request.session.itervalues()
        request.session.iteritems()
 
 
        # 用户session的随机字符串
        request.session.session_key
 
        # 将所有Session失效日期小于当前日期的数据删除
        request.session.clear_expired()
 
        # 检查 用户session的随机字符串 在数据库中是否
        request.session.exists("session_key")
 
        # 删除当前用户的所有Session数据
        request.session.delete("session_key")
 
        request.session.set_expiry(value)
            * 如果value是个整数,session会在些秒数后失效。
            * 如果value是个datatime或timedelta,session就会在这个时间后失效。
            * 如果value是0,用户关闭浏览器session就会失效。
            * 如果value是None,session会依赖全局session失效策略。

 

2、存储在文件中的配置信息

#a. 配置 settings.py
 
    SESSION_ENGINE = 'django.contrib.sessions.backends.file'    # 引擎
    SESSION_FILE_PATH = None                                    # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()                                                            # 如:/var/folders/d3/j9tj0gz93dg06bmwxmhh6_xm0000gn/T
 
 
    SESSION_COOKIE_NAME = "sessionid"                          # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串
    SESSION_COOKIE_PATH = "/"                                  # Session的cookie保存的路径
    SESSION_COOKIE_DOMAIN = None                                # Session的cookie保存的域名
    SESSION_COOKIE_SECURE = False                               # 是否Https传输cookie
    SESSION_COOKIE_HTTPONLY = True                              # 是否Session的cookie只支持http传输
    SESSION_COOKIE_AGE = 1209600                                # Session的cookie失效日期(2周)
    SESSION_EXPIRE_AT_BROWSER_CLOSE = False                     # 是否关闭浏览器使得Session过期
    SESSION_SAVE_EVERY_REQUEST = False                          # 是否每次请求都保存Session,默认修改之后才保存

 

3、存储在缓存和数据库中的配置信息

#数据库用于做持久化,缓存用于提高效率
 
#a. 配置 settings.py
 
    SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'        # 引擎

4、存储在加密的cookie中这个我们一般不用

posted @ 2017-12-04 16:22  九二零  阅读(100)  评论(0编辑  收藏  举报