有读者问如何利用Django开发这样一个权限功能:用户不用登录凭邀请码即可访问特定内容,且每次邀请码验证成功后还需要限制用户的访问时间。今天小编我就来分享下如何利用session实现这个需求。文末附有源码地址,使用Django 3.1开发,适合新人拿django的session框架练手。
实现原理
每当用户访问一个url,先判断用户的ip地址是不是已经在request.session里。如果不在,则展示要求用户输入有效的邀请码的表单,验证通过后把用户ip记录在session里,并跳转到访问内容页面。
最后实现效果如下所示:
创建项目和APP
首先我们创建一个名为myproject的项目, app名为myapp,整个项目目录结构如下所示:
然后打开项目的settings.py, 把myapp加入到INSTALLED_APP中去。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp',
]
因为本例中我们要使用session,请确保settings.py中的INSTALLED_APP中包括了django.contrib.sessions, 中间件包括了SessionMiddleware。另外我们还需要设置下SESSION_ENGINE, 本例中使用django自带的sqlite3存储session,当然你还可以使用缓存或者文件存储session。
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
如果你对中间件或session不了解的,可以先阅读如下两篇文章: