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
``

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

推荐PyPI第三方库


热门话题
java为什么运行按钮在Eclipse中不起作用?   java构造函数:实例变量是否为对象存储单独的值?   java使用jquery获取值   生产文件夹和源文件夹中的java单元测试   java递归问题这个解决方案正确吗?有更简单的解决方案吗?   java Android sqlite正在检索已选中中的行   javacom。谷歌。云数据存储。DatastoreException:请求缺少必需的身份验证凭据   java无法在Linux Ubuntu 12.04上运行maven2   在监视器的上下文中,被阻塞的线程在被notify()调用唤醒后在何处继续执行?   安卓如何从游标获取Bool(Java SQLite)   如何阻止rxjava runnable发出?   使用设备管理时应用程序中的java Android实例化异常