django rest框架的一个扩展,提供了一个可配置的密码重置策略
django-rest-passwordreset的Python项目详细描述
#django rest密码重置
[![PYPI版本](https://badge.fury.io/py/django rest passwordreset.svg)(https://badge.fury.io/py/django rest passwordreset)
[![构建状态](https://travis-ci.org/anx-ckreuzberger/django-rest-passwordreset.svg?branch=master)(https://travis ci.org/anx ckreuzberger/django rest password reset)
这个python包为django rest framework提供了一个简单的密码重置策略,用户可以通过注册的电子邮件地址请求密码
重置令牌。
他的软件包不会对令牌如何传递给最终用户(电子邮件、文本消息等)做出任何假设。
相反,该软件包提供了一个可以响应的信号(例如,通过发送电子邮件或文本消息)。
*请求令牌
*验证(确认)令牌(并更改密码)
\使用pip从pypi安装包:
``bash
pip install django rest passwordreset
```
2。在django设置文件中,将"django\u rest\u passwordreset"添加到"已安装的应用程序"(在"rest\u framework"之后):
``python
installed\u apps=(
…
"django.contrib.auth"、
…
"rest\u framework"、
…
"django\u rest\u passwordreset"、
。.
)
````
>3.这个包提供了两个端点,可以通过在"url.py"中包含"django\u rest"password reset.urls"来包含这些端点,如下所示:
``python
from django.conf.urls import url,include
…
url(r'^api/password\u reset/',include('django\u rest_password reset.urls',namespace="password"reset"),
…
]
````
**注意**:您可以根据需要调整URL。
il``parameter
*`post${api-url}/reset-password/confirm/`-使用有效的``token``,用户密码设置为提供的``password`
,其中`${api-url}/`是在*url.py*中指定的url(例如,`api/password-reset/`)
在djangos ``settings.py``文件中可以设置以下设置:
*`django_rest_multitokenauth_reset_token_expiry_time`-以小时为单位的令牌处于活动状态的时间(默认值:24)
**请注意**:每次调用时都会根据此设置自动清除过期的令牌"`resetPasswordrequestToken.post`.
ET(用户)``-在重置密码后触发
创建两个新的django模板:"email/user_reset_password.html"和"email/user_reset_password.txt"。这些模板将包含发送给用户的电子邮件以及密码重置链接(或令牌)。
在模板中,您可以访问以下上下文变量:"当前用户"、"用户名"、"电子邮件"、"重置密码URL"。您可以根据自己的需要自行调整。
2.将包含django信号的以下代码添加到您的应用程序中(请参见[django文档的这一部分](https://docs.djangoproject.com/en/1.11/topics/signals/connecting receiver functions),以获取有关在何处放置信号的详细信息)。
``python
from django.core.mail import emailmultialternatives
来自django.dispatch import receiver
来自django.template.loader import render_to_string
来自django.url import reverse
来自django_rest_password reset.signals import reset_password_token_created
@receiver(reset_password_token_created)
def password_reset_token_created(sender,instance,reset_password_token,*args,**kwargs):
"
处理密码重置令牌
创建令牌时,需要向用户发送电子邮件
:param sender:发送信号的视图类
:param instance:查看发送信号的实例
:param reset_password_token:令牌模型对象
:param args:
:param kwargs:
:return:
"
"向用户发送电子邮件
context={
"当前用户":reset_password_token.user,
"用户名":重置密码令牌。用户。用户名,
"电子邮件":重置密码令牌。用户。电子邮件,
"重置密码URL":"{}"?token={}.格式(reverse('password\u reset:reset password request'),reset_password_token.key)
}
ord.txt,context)
msg=emailmultialternatives(
/>[重置密码令牌.用户.电子邮件]
)
消息.附加选项(电子邮件HTML消息,"文本/HTML")
msg.send()
````
>3.现在您应该可以使用端点通过电子邮件地址请求密码重置令牌。
如果要在本地测试,我建议使用某种类型的假邮件服务器(如maildump)。
能够配置"randomstringtokengenerator"的参数,并切换到
另一个令牌生成器,例如"randomstringtokengenerator"。您还可以生成自己的令牌生成器类。
这是默认配置。
`` python
django_rest_passwordreset_token配置{
"类":"django_rest_passwordreset.tokens.randomstringtokengenerator"
}
`````
您可以如下配置长度:
`` python
django_rest_passwordreset_token配置{
"类":"django_rest_passwardreset.tokens.randomstringtokengenerator",
"options":{
"最小长度":20,
"最大长度":30
}
}
}
`````
eset.tokens.randomNumberTokenGenerator"
}
````
您可以按如下方式配置最小和最大数量:
```python
django_rest_passwordreset_token_config={
"类":"django_rest_passwordreset.tokens.randomNumberTokenGenerator",
"选项":{
最小值:1500,
"最大值":9999
}
}
`````
字符串令牌生成器。
.tokens导入basetokengenerator
类randomstringtokengenerator(basetokengenerator):
"
使用os.urandom和binasci.hexlify生成最小和最大长度的随机字符串。hexlify
""
_令牌(self,*args,**kwargs):
"使用os.u random和binascii.hexlify""生成伪随机代码"
"根据最小长度和最大长度确定长度
长度=random.randint(self.min长度,self.max长度)
sing os.urandom and hexlify
返回binasci.hexlify(
os.urandom(self.max廑length_
).decode()[0:length]
````
作为参考,这里有一个显示保证和测试兼容性的矩阵。
django rest passwordreset version django versions django rest framework versions
---------------------------| 3.6-3.9
1.0(WIP)1.11、2.0、2.2 3.6-3.9
django rest framework.org/topics/browsable api/)。
![drf_browsable_e mail_validation](docs/browsable_api_email_validation.png"可浏览api电子邮件验证")
![drf_browsable_password_validation](docs/browsable_api_password_validation.png"可浏览api电子邮件验证")
![core api_docs](docs/coreapi_docs.png"core api docs")
\django 2.1迁移-表的多个主键…
django 2.1引入了迁移的突破性更改(请参阅[django issue 29790](https://code.djangoproject.com/ticket/29790))。因此,我们必须重写migration[0002_pk_migration.py](django_rest_passwordreset/migrations/0002_pk_migration.py),使其涵盖django版本之前(`<;`)2.1和之后(`>;=`)2.1。
library试图遵循unix的理念"做一件事,做好它"(它为django rest框架提供了一个基本的密码重置端点)。欢迎以拉式请求和问题的形式作出贡献!如果创建拉取请求,请确保没有引入中断更改。
测试
请参见文件夹[tests/](tests/)。基本上,所有端点都包含多个单元测试。
使用此代码段运行测试:
``bash
pip install-r requirements\u test.txt
python setup.py install
cd tests
python manage.py test
``
[![PYPI版本](https://badge.fury.io/py/django rest passwordreset.svg)(https://badge.fury.io/py/django rest passwordreset)
[![构建状态](https://travis-ci.org/anx-ckreuzberger/django-rest-passwordreset.svg?branch=master)(https://travis ci.org/anx ckreuzberger/django rest password reset)
这个python包为django rest framework提供了一个简单的密码重置策略,用户可以通过注册的电子邮件地址请求密码
重置令牌。
他的软件包不会对令牌如何传递给最终用户(电子邮件、文本消息等)做出任何假设。
相反,该软件包提供了一个可以响应的信号(例如,通过发送电子邮件或文本消息)。
*请求令牌
*验证(确认)令牌(并更改密码)
\使用pip从pypi安装包:
``bash
pip install django rest passwordreset
```
2。在django设置文件中,将"django\u rest\u passwordreset"添加到"已安装的应用程序"(在"rest\u framework"之后):
``python
installed\u apps=(
…
"django.contrib.auth"、
…
"rest\u framework"、
…
"django\u rest\u passwordreset"、
。.
)
````
>3.这个包提供了两个端点,可以通过在"url.py"中包含"django\u rest"password reset.urls"来包含这些端点,如下所示:
``python
from django.conf.urls import url,include
url(r'^api/password\u reset/',include('django\u rest_password reset.urls',namespace="password"reset"),
…
]
````
**注意**:您可以根据需要调整URL。
il``parameter
*`post${api-url}/reset-password/confirm/`-使用有效的``token``,用户密码设置为提供的``password`
,其中`${api-url}/`是在*url.py*中指定的url(例如,`api/password-reset/`)
在djangos ``settings.py``文件中可以设置以下设置:
*`django_rest_multitokenauth_reset_token_expiry_time`-以小时为单位的令牌处于活动状态的时间(默认值:24)
**请注意**:每次调用时都会根据此设置自动清除过期的令牌"`resetPasswordrequestToken.post`.
ET(用户)``-在重置密码后触发
创建两个新的django模板:"email/user_reset_password.html"和"email/user_reset_password.txt"。这些模板将包含发送给用户的电子邮件以及密码重置链接(或令牌)。
在模板中,您可以访问以下上下文变量:"当前用户"、"用户名"、"电子邮件"、"重置密码URL"。您可以根据自己的需要自行调整。
2.将包含django信号的以下代码添加到您的应用程序中(请参见[django文档的这一部分](https://docs.djangoproject.com/en/1.11/topics/signals/connecting receiver functions),以获取有关在何处放置信号的详细信息)。
``python
from django.core.mail import emailmultialternatives
来自django.dispatch import receiver
来自django.template.loader import render_to_string
来自django.url import reverse
来自django_rest_password reset.signals import reset_password_token_created
@receiver(reset_password_token_created)
def password_reset_token_created(sender,instance,reset_password_token,*args,**kwargs):
"
处理密码重置令牌
创建令牌时,需要向用户发送电子邮件
:param sender:发送信号的视图类
:param instance:查看发送信号的实例
:param reset_password_token:令牌模型对象
:param args:
:param kwargs:
:return:
"
"向用户发送电子邮件
context={
"当前用户":reset_password_token.user,
"用户名":重置密码令牌。用户。用户名,
"电子邮件":重置密码令牌。用户。电子邮件,
"重置密码URL":"{}"?token={}.格式(reverse('password\u reset:reset password request'),reset_password_token.key)
}
ord.txt,context)
msg=emailmultialternatives(
/>[重置密码令牌.用户.电子邮件]
)
消息.附加选项(电子邮件HTML消息,"文本/HTML")
msg.send()
````
>3.现在您应该可以使用端点通过电子邮件地址请求密码重置令牌。
如果要在本地测试,我建议使用某种类型的假邮件服务器(如maildump)。
能够配置"randomstringtokengenerator"的参数,并切换到
另一个令牌生成器,例如"randomstringtokengenerator"。您还可以生成自己的令牌生成器类。
这是默认配置。
`` python
django_rest_passwordreset_token配置{
"类":"django_rest_passwordreset.tokens.randomstringtokengenerator"
}
`````
您可以如下配置长度:
`` python
django_rest_passwordreset_token配置{
"类":"django_rest_passwardreset.tokens.randomstringtokengenerator",
"options":{
"最小长度":20,
"最大长度":30
}
}
}
`````
eset.tokens.randomNumberTokenGenerator"
}
````
您可以按如下方式配置最小和最大数量:
```python
django_rest_passwordreset_token_config={
"类":"django_rest_passwordreset.tokens.randomNumberTokenGenerator",
"选项":{
最小值:1500,
"最大值":9999
}
}
`````
字符串令牌生成器。
.tokens导入basetokengenerator
类randomstringtokengenerator(basetokengenerator):
"
使用os.urandom和binasci.hexlify生成最小和最大长度的随机字符串。hexlify
""
_令牌(self,*args,**kwargs):
"使用os.u random和binascii.hexlify""生成伪随机代码"
"根据最小长度和最大长度确定长度
长度=random.randint(self.min长度,self.max长度)
sing os.urandom and hexlify
返回binasci.hexlify(
os.urandom(self.max廑length_
).decode()[0:length]
````
作为参考,这里有一个显示保证和测试兼容性的矩阵。
django rest passwordreset version django versions django rest framework versions
---------------------------| 3.6-3.9
1.0(WIP)1.11、2.0、2.2 3.6-3.9
django rest framework.org/topics/browsable api/)。
![drf_browsable_e mail_validation](docs/browsable_api_email_validation.png"可浏览api电子邮件验证")
![drf_browsable_password_validation](docs/browsable_api_password_validation.png"可浏览api电子邮件验证")
![core api_docs](docs/coreapi_docs.png"core api docs")
\django 2.1迁移-表的多个主键…
django 2.1引入了迁移的突破性更改(请参阅[django issue 29790](https://code.djangoproject.com/ticket/29790))。因此,我们必须重写migration[0002_pk_migration.py](django_rest_passwordreset/migrations/0002_pk_migration.py),使其涵盖django版本之前(`<;`)2.1和之后(`>;=`)2.1。
library试图遵循unix的理念"做一件事,做好它"(它为django rest框架提供了一个基本的密码重置端点)。欢迎以拉式请求和问题的形式作出贡献!如果创建拉取请求,请确保没有引入中断更改。
测试
请参见文件夹[tests/](tests/)。基本上,所有端点都包含多个单元测试。
使用此代码段运行测试:
``bash
pip install-r requirements\u test.txt
python setup.py install
cd tests
python manage.py test
``