2012-01-13 15 views
0
def register(request): 
    flag = True 
    possible = 'abcdefghijklmnopqrstuvwxyz' 
    token = '' 
    length = 10 
    i = 0 

    current_datetime = datetime.datetime.now() 

    user = UsersModelForm() 
    if request.method == 'POST': 
     userf = UsersModelForm(request.POST) 
     username = userf.data['username'] 
     password = userf.data['password'] 
     passwordrepeat = userf.data['passwordrepeat'] 
     email = userf.data['email'] 

     if password != passwordrepeat: 
      flag = False 
      passVariable = {'user':user, 'flag': False} 
      return render_to_response('register.html', passVariable, context_instance=RequestContext(request)) 

     elif password == passwordrepeat: 
      while i<10: 
       temp = random.choice(possible) 
       token = token + temp 
       i=i+1 

      userf.email_token = token 
      userf.email_token_expiry = current_datetime + timedelta(1) 
      userf.save() 
      return HttpResponseRedirect('/') 
    else: 
     return render_to_response('register.html', {"user": user, 'flag': True}, context_instance=RequestContext(request)) 

從MySQL的PROMT:此代碼在email_token_expiry varchar字段中分配令牌有什麼問題?

select * from blog_users;email_token field了空值,爲什麼呢? print token顯示正確的標記,但它不會將標記字符串插入email_token field

models.py

class Users(models.Model): 
    username = models.CharField(max_length=255) 
    slug = models.CharField(max_length=255, default='0') 
    password = models.CharField(max_length=300) 
    passwordrepeat = models.CharField('Repeat Password', max_length=300) 
    password_token = models.CharField(max_length=300, default='0') 
    email = models.CharField(max_length=255) 
    email_verified = models.BooleanField(default=False) 
    email_token = models.CharField(max_length=255) 
    email_token_expiry = models.DateTimeField(auto_now_add=True) 
    tos = models.BooleanField(default=False) 
    active = models.BooleanField(default=False) 
    last_login = models.DateTimeField(auto_now_add=True) 
    last_action = models.DateTimeField(auto_now_add=True) 
    is_admin = models.BooleanField(default=False) 
    role = models.CharField(max_length=255, default='0') 
    created = models.DateTimeField(auto_now_add=True) 
    modified = models.DateTimeField(auto_now_add=True) 

    def __unicode__(self): 
     return self.username 

class UsersModelForm(forms.ModelForm): 
    class Meta: 
     model = Users 
     fields = ('username', 'password', 'passwordrepeat', 'email') 
     widgets = { 
      'password' : PasswordInput(), 
      'passwordrepeat' : PasswordInput(), 
     } 
+0

你什麼時候綁定'userf'? – 2012-01-13 11:13:54

+0

哪個類有email_token屬性? – disorder 2012-01-13 11:15:41

+0

@disorder,我更新了原來的帖子,再次看到了解。 – shibly 2012-01-13 11:22:34

回答

2

要更新的模式,而不是形式。

newuser = userf.save(commit=False) 
newuser.email_token = token 
newuser.email_token_expiry = current_datetime + timedelta(1) 
newuser.save() 
+0

爲什麼'commit = False'? 'newuser = userf.save(commit = False)',但'userf.save()'保存了'email_token_expiry'的值,那麼保存'email_token'的值有什麼問題?而這個方法'commit = False'看起來很不尋常,有沒有其他(普通)的方法來做到這一點? – shibly 2012-01-13 11:31:40

+0

如果需要,您需要'commit = False'。你之後更新的字段爲'null = False'。 – 2012-01-13 11:32:45

+0

此外,令牌生成可以簡化爲:'''.join(random.choice(string.ascii_lowercase + string.digits)for x in range(10))' – Chewie 2012-01-13 11:33:41