【问题标题】:How to pass a value from model to view in django?如何将值从模型传递到 django 中的视图?
【发布时间】:2018-01-01 16:57:47
【问题描述】:

如何将 codeval 变量从 models.py 传递到 views.py

在models.py中

from django.db import models  
from django.contrib.auth.models import User  
from django.db.models.signals import post_save  
import random  
from django.core.mail import send_mail        

class UserProfile(models.Model):  
    user = models.OneToOneField(User)  
    description = models.CharField(max_length=100, default='')  
    city = models.CharField(max_length=100, default='')  
    website = models.URLField(default='')  
    mobile = models.IntegerField(default=0)  
    code = models.IntegerField(default=0)        

def create_profile(sender, **kwargs):  
    if kwargs['created']:  
    user_profile = UserProfile.objects.create(user=kwargs['instance'])  
    codeval = random.randint(111111,999999)    
    user_profile.code = codeval  
    user_profile.save()  
    receiver = User.objects.get(id=user_profile.user_id).email  
    send_mail(' Confirm your account on Abolombon',   
        'Thanks for signing up with Abolombon! Your Abolombon verification code is:\n %s\n\n Thank you\nAbolombon.com'%(codeval),   
        'testpurpose2040@gmail.com',   
        [receiver])

post_save.connect(create_profile, sender=User)  

在views.py中

def verification(request, args=codeval):
    return render(request,'website/verification.html',{'args':args})

我正在 django 中创建一个电子商务网站,我需要用户注册选项。为此,我在用户注册表单中使用了 django 的构建。但我需要存储一些关于用户的附加信息,例如联系电话、城市等。我还想验证用户是否将 6 位代码发送到他们相应的电子邮件地址。

但在 django 的构建形式中,它们没有存储验证码的字段。所以我创建了 UserProfile 模型来服务这个目的。并创建了代码字段来存储 6 位随机数。

我想将此随机数存储到代码字段中,并将其发送到用户电子邮件地址。当用户输入代码时,一个函数将与存储的代码进行验证。为此,我需要 key 从数据库中检索代码。所以我想将此密钥传递给 views.py

谢谢

【问题讨论】:

  • 为了清楚起见,您想从codeval 获得UserProfile
  • 我需要 UerProfile id 来获取 UserProfile.objects.get(id=id).code 以将其与用户的匹配
  • 在用户输入验证码的页面,你还有什么其他的方法来验证他们的身份?即它是该特定用户的自定义 URL,还是他们也输入了他们的用户名或电子邮件地址?如果是这样,那么您可以使用该信息来查找用户对象和 UserProfile 对象。
  • def signUpView(request): if request.method == 'POST': form = RegistrationForm(request.POST) form.is_active = False form.save() if form.is_valid(): form .save() return redirect('/website/login/') else: form = RegistrationForm() return render(request,'website/signUp.html',{'form':form})

标签: python django


【解决方案1】:

如果我正确解释了您的问题,您需要UserProfile.objects.get(code=codeval)。这将为您提供实际的个人资料,因此如果您想要 id,只需执行UserProfile.objects.get(...).id

请注意,您当前的代码可能会为多个配置文件提供相同的代码,因此您应该阻止这种情况,或者使用 .filter 而不是 .get 获取所有匹配的配置文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-07
    • 2018-02-10
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多