【问题标题】:Django resend activation link, missing 1 required positional argument: 'user'Django 重新发送激活链接,缺少 1 个必需的位置参数:'user'
【发布时间】:2019-11-02 22:48:01
【问题描述】:

我读过类似的问题,但我不明白为什么这不起作用。当用户单击链接时,我正在尝试向用户发送重新激活电子邮件。当用户注册并发送电子邮件时,激活链接会正确生成,但是当我尝试再次调用相同的函数来重新激活链接时,它无法正常工作,说它缺少一个参数。函数如下:

acounts/views.py

def sendactivationmail(request, user):
    # Creating token and masing uid of user
    token = default_token_generator.make_token(user)
    uid = urlsafe_base64_encode(force_bytes(user.pk)).decode()
    # Sending email for email verification
    subject = 'Please Verify Your Email'
    from_email = settings.DEFAULT_FROM_EMAIL
    to_email = [user.email]
    context = {
        'url': settings.BASE_URL + reverse('user-activation-link', kwargs={
            'uidb64': uid,
            'token': token,
        }),
    }
    contact_message = render_to_string('verify_email.html', context)
    plain_message = strip_tags(contact_message)
    send_mail(subject, plain_message, from_email, to_email, html_message=contact_message, fail_silently=True)

    return redirect(reverse('login'))

accounts/urls.py

from django.conf.urls import url
from .views import *
from . import views
from urllib import request
from django.contrib.auth.models import User


urlpatterns = [
    url(r'^reactivate/$', views.sendactivationmail(request, User), name='reactivate'),

这是将 requestuser 参数传递给函数的正确方法吗?

编辑:这是用于重定向用户的链接:

<p><a href="{% url 'reactivate' %}">Click here</a> to resend the activation email.</p>

【问题讨论】:

  • 请张贴用户点击发送激活链接的html
  • 您正在传递用户模型,从用户模型获取特定用户,然后将该用户对象作为参数传递。
  • @Exprator 我已经用它更新了问题,但它是一个简单的链接,重定向到重新激活页面。
  • @VikasP 你能解释一下我该怎么做吗?我已经尝试过 User.pk() 和 User 类的其他对象,但我似乎无法弄清楚。
  • @NaeemKhan 得到这样的用户对象,user = User.objects.get(username="which ever user you want to send") 并传递这个用户对象。

标签: python django django-urls django-users django-request


【解决方案1】:

把你的 urlpattern 改成这个

urlpatterns = [
    url(r'^reactivate/$', views.sendactivationmail, name='reactivate'),
    .....
]

和 html 到,但用户必须登录才能使用此链接。记住这一点

<p><a href="{% url 'reactivate' request.user %}">Click here</a> to resend the activation email.</p>

【讨论】:

  • 解决了这个问题。非常感谢!
猜你喜欢
  • 2018-06-20
  • 2017-10-20
  • 1970-01-01
  • 2021-09-12
  • 2018-01-24
  • 2019-05-27
  • 2015-07-08
  • 2017-07-27
  • 1970-01-01
相关资源
最近更新 更多