用于安全用户帐户的通用django应用程序

django-safet的Python项目详细描述


Build Status

generic django应用程序,以获得更安全的用户帐户。

功能

会话

  • 用户可以看到所有活动会话
  • 用户可以禁用给定的活动会话
  • 用户可以禁用所有活动会话

强制更改密码

  • 管理员可以要求任何用户更改密码

工作流

会话

  1. 用户登录
  2. 我们将逻辑连接到user_logged_in信号
  3. 我们创建了一个新的safety.models.Session实例
  4. 用户可以查看她的会话列表(包括IP、上次活动和设备信息)
  5. 用户可以删除列表中的给定会话
  6. 我们删除了商店中相关的safety.models.Session实例和相关会话
  7. 用户可以删除除当前会话之外的所有活动会话
  8. 我们以同样的方式进行:从存储中删除实例和相关会话
  9. 用户注销
  10. 我们将逻辑连接到user_logged_out信号
  11. 我们删除了相关的safety.models.Session实例

强制更改密码

  1. 管理员创建一个PasswordChange实例并将required设置为True
  2. 当用户登录时,它将被重定向到密码更改窗体
  3. 除非用户不更改密码,否则无权转到其他位置
  4. 用户更改其密码
  5. 现在授权它到别处去

安装

安装必备组件

必须在服务器上安装geoip库。

在带有自制程序的OS X上:

brew install geoip

您还需要geoip数据库。

对于django>;=1.9,请将城市和国家数据库下载为二进制(非csv):

http://dev.maxmind.com/geoip/geoip2/geolite2/

对于django 1.8,将城市和国家传统数据库下载为二进制(非csv):

http://dev.maxmind.com/geoip/legacy/geolite/

在需要的地方创建一个目录并解压缩这些存档文件 目录。完成后,设置指向此目录的GEOIP_PATH设置:

GEOIP_PATH='/absolute/path/to/maxmind/db/directory'

安装Django Safety

安装

$ pip install django-safety

settings.py中,将safety添加到INSTALLED_APPS

INSTALLED_APPS=(# Your other apps here.'safety',)

urls.py中,在safety命名空间下包含safety.urls

urlpatterns=[# Your other URLs here.url(r'^security/',include('safety.urls',namespace='safety')),]

同步数据库:

$ python manage.py migrate safety

太好了。会话功能已就绪。

如果要启用“强制更改密码”功能,请阅读下一页。

启用“强制更改密码”功能

要启用此功能,您有两个选择:

  • 你只想保护特定的视图吗?使用password_change_required()decorator
  • 你想保护你的整个应用程序吗?使用PasswordChangeMiddleware中间件

decorator作为任何django视图的decorator工作。

## In your urls.py#fromsafety.decoratorsimportpassword_change_requiredfrom.viewsimportprotect_meurlpatterns=[# Other URLs here.url(r'^protect-me/$',password_change_required(protect_me)),]## Or in your views.py (it's up to you)#fromdjango.shortcutsimportrenderfromsafety.decoratorsimportpassword_change_required@password_change_requireddefprotect_me(request):returnrender(request,'protect_me.html')

该中间件与任何django中间件一样工作。

safety.middleware.PasswordChangeMiddleware中间件添加到settings.py

MIDDLEWARE_CLASSES=['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.auth.middleware.SessionAuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware','safety.middleware.PasswordChangeMiddleware',]

完成。

设置

SettingDescription
^{tt20}$The Python path to your own “login required” mixin class. Defaults to ^{tt21}$.
^{tt22}$The Python path to your own IP resolver callable. Defaults to ^{tt23}$.
^{tt24}$The Python path to your own device resolver callable. Defaults to ^{tt25}$.
^{tt26}$The Python path to your own location resolver callable. Defaults to ^{tt27}$.

开发

# Install pip and virtualenv
$ sudo easy_install pip
$ sudo pip install virtualenv

# Clone repository
$ git clone https://github.com/ulule/django-safety.git

# Setup your development environment
$ cd django-safety
$ make devenv
$ source .venv/bin/activate

# Download GeoIP databases
$ make geoip

# Launch test suite
$ make test# Launch test suite with tox to check compatibility
$ tox

# Run the example project (default user username is "johndoe")
$ make example-migrate
$ make example-user
$ make example-serve

贡献

  1. 创建问题(before提交请求)
  2. 提交错误或功能请求
  3. 你想自己修复还是编写代码?伟大的!分叉项目
  4. 创建一个分支,总是添加测试并确保它们都通过了tox
  5. 提交拉取请求

兼容性

  • Python2.7:django 1.8,1.9
  • Python3.4:django 1.8,1.9
  • Python3.5:django 1.8,1.9

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Requestcontextholder在spring 4中具有并发访问权限。IBMWebSphere上的x Web应用程序?   java如何下载、设置和使用Eclipse?   java如何组合这些mysql语句   java JDBC无法连接到openshift上的mysql数据库   如果存在允许正确处理的重载,java对于方便的方法来说是否可行?   使用hibernate序列的java Spring MVC不存在   具有路径的java Selenium ChromeDriver负载扩展问题   读一本书。java中的java文件   退出队列时,Java队列程序结果为空   Java lambda返回带有重复代码问题的列表   java使用意图从其他活动传递数据并在listview中显示   java如何在java中创建JSON输出   java Android:在不破坏或暂停活动的情况下关闭显示   支持Android电视和手机的java多apk   关于Java应用程序测试和调试的一组问题   如何在JavaSE中使用jdbcRealmShiro进行授权   在java中是否有一个无异常检查的URL解析实用程序?   当页面上有多个相同类型的元素时,java会选择一个特定的元素   递归需要帮助发现java代码中的缺陷