django rest框架的一个扩展,提供了一种密码重置策略

django2-rest-passwordreset的Python项目详细描述


django rest密码重置

这个python包为django rest框架提供了一个简单的密码重置策略,用户可以在其中请求密码 通过其注册的电子邮件地址重置令牌。

这个包背后的主要思想是不要对令牌如何传递给最终用户(电子邮件、文本消息等)做任何假设。 相反,这个包提供了一个可以响应的信号(例如,通过发送电子邮件或文本消息)。

这个包基本上提供了两个rest端点:

  • 请求令牌
  • 验证(确认)令牌(并更改密码)

快速启动

  1. 使用pip:
  2. 从pypi安装包
pip install django-rest-passwordreset
  1. django_rest_passwordreset添加到django设置文件中的INSTALLED_APPS(在rest_framework之后):
INSTALLED_APPS=(...'django.contrib.auth',...'rest_framework',...'django_rest_passwordreset',...)
  1. 这个包提供了两个端点,可以通过在您的urls.py中包含django_rest_passwordreset.urls来包含这些端点,如下所示:
fromdjango.conf.urlsimporturl,includeurlpatterns=[...url(r'^api/password_reset/',include('django_rest_passwordreset.urls',namespace='password_reset')),...]

注意:您可以根据需要调整url。

终点

提供了以下端点:

  • reset_password-使用email参数请求重置密码令牌
  • reset_password/confirm-使用有效的token,用户密码设置为提供的password

信号

  • reset_password_token_created(reset_password_token)在生成重置密码令牌时激发
  • pre_password_reset(user)-在重置密码之前触发
  • post_password_reset(user)-重置密码后激发

发送电子邮件的示例

  1. 创建两个新的django模板:email/user_reset_password.htmlemail/user_reset_password.txt。这些模板将包含发送给用户的电子邮件以及密码重置链接(或令牌)。 在模板中,您可以访问以下上下文变量:current_userusernameemailreset_password_url。你可以根据自己的需要随意调整。

  2. 将包含django信号的以下代码添加到应用程序中(有关在何处放置信号的详细信息,请参见this part of the django documentation)。

fromdjango.dispatchimportreceiverfromdjango_rest_passwordreset.signalsimportreset_password_token_created@receiver(reset_password_token_created)defpassword_reset_token_created(sender,reset_password_token,*args,**kwargs):"""    Handles password reset tokens    When a token is created, an e-mail needs to be sent to the user    :param sender:    :param reset_password_token:    :param args:    :param kwargs:    :return:    """# send an e-mail to the usercontext={'current_user':reset_password_token.user,'username':reset_password_token.user.username,'email':reset_password_token.user.email,# ToDo: The URL can (and should) be constructed using pythons built-in `reverse` method.'reset_password_url':"http://some_url/reset/?token={token}".format(token=reset_password_token.key)}# render email textemail_html_message=render_to_string('email/user_reset_password.html',context)email_plaintext_message=render_to_string('email/user_reset_password.txt',context)msg=EmailMultiAlternatives(# title:_("Password Reset for {title}".format(title="Some website title")),# message:email_plaintext_message,# from:"noreply@somehost.local",# to:[reset_password_token.user.email])msg.attach_alternative(email_html_message,"text/html")msg.send()
  1. 现在您应该可以使用端点通过电子邮件地址请求密码重置令牌。 如果您想在本地测试这个,我建议使用某种伪造的mailserver(比如maildump)。

测试

请参阅文件夹tests/。基本上,所有端点都被多个 单元测试。

使用此代码段运行测试:

pip install -r requirements_test.txt
python setup.py install
cd tests
python manage.py test

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

推荐PyPI第三方库


热门话题
如何下载多个。java中的PDF文件   linux Java打开文件,形成实际用户主页~/   java如何在时间线内维护TableView选择?   java Hibernate注释@Where vs@WhereJoinTable   Java读/写访问异常FileNotFoundException(访问被拒绝)   继承在Java中是否可以扩展最后一个类?   Android HttpClient使用java使应用程序崩溃。lang.OutOfMemoryError:pthread_create   java为什么即使我在proguardproject中添加了jar文件,也会出现这种错误。txt?   如果添加JButton,swing Java FocusListener和KeyListener将无法工作   java使用solrj检索json格式的SolrDocument   使用Microsoft Visual Studio代码进行Java编程   java NoClassDefFoundError:org/apache/log4j/Logger   哈希集中包含相等对象的java   java中的参数化构造函数是否需要有一个主体?   java类似于NetBeans不必要的代码检测器   Java实践问题   java Blackberry“[projectname].调试文件丢失”和“I/O错误:找不到程序”jar