会话技术

一、 cookie(存放于客户端,不安全,容易被修改)

1. 设置cookie

key是键名,可以是任意名字

不加密的cookie(原始cookie)

HttpResponse.set_cookie(key, value='', max_age=None, expires=None,
path='/', domain=None, secure=None, httponly=False)

加密的cookie(通过盐值加密)

HttpResponse.set_signed_cookie(key, value, salt='', max_age=None,
expires=None, path='/', domain=None, secure=None, httponly=False)
参数名称说明
keycookie的名称(*)
valuecookie的值,默认是空字符
max_agecookies的持续有效时间(以秒计),如果设置为 None,cookies 在浏览器关闭的时候就失效了。
expirescookies的过期时间,格式:“Wdy, DD-Mth-YY HH:MM:SS GMT” 如果设置这个参数,它将覆盖max_age
pathcookie⽣效的路径前缀,浏览器只会把cookie回传给带有该路径的⻚⾯,这样你可以避免将cookie传给站点中的其他的应⽤。/ 表示根路径,特殊的:根路径的cookie可以被任何url的⻚⾯访问
secure如果设置为 True ,浏览器将通过HTTPS来回传cookie。
httponly仅http传输 不能使⽤js获取cookie

2.获取cookie

原始cookie获取

HttpRequest.COOKIES.get(key)

加密cookie获取

HttpRequest.get_signed_cookie(key, default=RAISE_ERROR, salt='',
max_age=None)

3.删除cookie

#删除cookie
HttpResponse.delete_cookie(key, path='/', domain=None)
#使cookie立即失效
HttpResponse.set_cookie(key,'',max_age=-1)

二、session(存放于服务器,安全性高)

django中session的实现
1.在settings.py中配置

#djangoo自带部分
INSTALLED_APPS = [
 'django.contrib.sessions',
]
MIDDLEWARE = [
 'django.contrib.sessions.middleware.SessionMiddleware',
]

其他常用配置

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 = 7*24*60*60 # Session的cookie失效⽇期(2周) 默认
1209600秒
SESSION_EXPIRE_AT_BROWSER_CLOSE =True # 是否关闭浏览器使得Session过期
SESSION_SAVE_EVERY_REQUEST = True 
#如果你设置了session的过期时间 30分钟后,这个参数是False 30分钟过后,
session准时失效
#如果设置 True,在30分钟期间有请求服务端,就不会过期!

2.数据迁移,生成session使用的数据库表
控制台指令
python manage.py migrations
python manage.py migrate

session设置

request.session['key'] = 123
request.session.setdefault('key','default') # 存在则不设置

session获取

request.session.get('key')

session删除

request.session.clear()  #清空所有session 但是不会将session表中的数据删除
request.session.flush() #清空所有 并删除表中的数据
request.session.logout()  #退出登录 清除所有 并删除表中的数据
del req.session['key'] 删除某⼀个session的值

获取session所有键值对

request.session.keys() #获取所有的键
request.session.values() #获取所有的值 
request.session.items() #获取所有的键值对

session 过期时间

request.session.set_expiry(value)
‘’‘
1. 如果value是个整数,session会在些秒数后失效。
2. 如果value是个datatime或timedelta,session就会在这个时间后失效。
3. 如果value是0,⽤户关闭浏览器session就会失效。
4. 如果value是None,session会依赖全局session失效策略。
’‘’

三、用户认证系统

1.在app models中创建抽象用户类
继承自AbstractUser(django自带类)
eg

class User(AbstractUser):
    phone = models.CharField(max_length=50,null=True)

    class Meta:
        db_table = 'user'

2.settings中设置自定义用户模型

#自定义用户模型

AUTH_USER_MODEL = "app名字.User"

3.控制台迁移

python manage.py makemigrations
python manage.py migrate

注册时的用法

验证通过后注册用户时
用户对象创建,密码直接自行加密

User.objects.create_user(username=username,password=password,email=email)

登录密码验证以及记录用户登录状态

def login_view(request):
 if request.method == 'POST':
 username = request.POST.get('username')
 password = request.POST.get('password')
 # 验证⽤户是否存在(*)
 user = authenticate(request, username=username,
password=password)
 if user:
 # 判断⽤户是否激活
 if user:
 #记录登录状态(*)
 login(request, user)
 return redirect('/')
 else:
 return render(request, 'test/login.html', {'msg': '⽤户尚未激活'})
 else:
 return render(request, 'test/login.html', {'msg': '⽤
户密码错误'})
 else:
 return render(request, 'login.html')

登出操作

logout(request)

只允许登录⽤户访问

# settings 配置
LOGIN_URL = '/day05/login/'
# views(也可以在装饰器后加上未登录需要跳转的的路由地址)
@login_required((login_url='/app04/login/'))
def find_user_info(request):
 pass
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值