基本实现用户登录
用户未登录就不能访问指定页面
基于cookie实现
def login(request):
# return HttpResponse('...')
# return render('...')
# return redirect('...')
# 设置cookie
data = redirect('...')
data.set_cookie()
# 读取cookie
request.COOKIES.get('xx')
return data
def login(request):
"""
用户登录
:param request:
:return:
"""
if request.method == "GET":
return render(request, "login.html")
# 获取用户提交的用户名和密码
user = request.POST.get("username")
pawd = request.POST.get("password")
# 去数据库检查用户名和密码是否正确
user_obj = models.UserInfo.objects.filter(username=user, password=pawd).first()
# user_obj = models.UserInfo.objects.filter(username=user, password=pawd).exists()
if user_obj:
# 用户登录成功
result = redirect('/index/')
result.set_cookie('username', user)
return result
return render(request, "login.html", {'error': '用户名和密码错误'})
def index(request):
"""
博客园后台首页
:param request:
:return:
"""
user = request.COOKIES.get('username')
if not user:
return redirect('/login/')
return render(request, 'index.html', {"user": user})
应用场景
通过js设置cookie
两种方式
document.cookie = 'k1=wy222;path=/'
$.cookie('k1','wy222',{path:'/'})
注意:path不同会导致设置不同.
path的作用
? request.session.get(‘user_name’)
视图函数中的业务处理完毕,给用户响应,在响应时会将随机字符串储存到用户浏览器的cookie中
首先引入装饰器
装饰器要加入functools.wraps装饰:保留函数的元数据(函数名/注释)
import functools
def wrapper(func):
@functools.wraps
def inner(request, *args, **kwargs):
user = request.session.get('user_name')
if not user:
return redirect('/login/')
return func(request, *args, **kwargs)
return inner
django的session的默认储存在数据库,可以储存在其他地方吗
文件中,None可以指定文件路径
SESSION_ENGINE = ‘django.contrib.sessions.backends.file’
SESSION_FILE_PATH = ‘None’
缓存(内存)
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS = 'default'
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'unique-snowflake',
}
}
缓存(redis)
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS = 'default'
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"CONNECTION_POOL_KWARGS": {"max_connections": 100}
# "PASSWORD": "密码",
}
}
}
总结:
django中的session如何设置过期时间
SESSION_COOKIE_AGE = 1209600 # Session的
cookie失效日期(2周)
SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串
SESSION_COOKIE_DOMAIN = None # api.baidu.com /www.baidu.com/ xxx.baidu.com
SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径
SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输,即能否修改cookie
SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期
原文:https://www.cnblogs.com/daviddd/p/12051329.html