Monday, 15 July 2013

Adding invitation code to django registration -



Adding invitation code to django registration -

trying add together invite code django registration. know there bundle registration called invitation take care of seems should here code registration forms.py:

class registrationform(forms.form): """ form registering new user account. validates requested username not in use, , requires password entered twice grab typos. subclasses should sense free add together additional validation need, should avoid defining ``save()`` method -- actual saving of collected user info delegated active registration backend. """ required_css_class = 'required' username = forms.regexfield(regex=r'^[\w.@+-]+$', max_length=30, label=_("username"), error_messages={'invalid': _("this value may contain letters, numbers , @/./+/-/_ characters.")}) email = forms.emailfield(label=_("e-mail")) password1 = forms.charfield(widget=forms.passwordinput, label=_("password")) password2 = forms.charfield(widget=forms.passwordinput, label=_("password (again)")) code = forms.charfield(widget=forms.passwordinput, label=_("invitation code")) def clean_username(self): """ validate username alphanumeric , not in use. """ existing = user.objects.filter(username__iexact=self.cleaned_data['username']) if existing.exists(): raise forms.validationerror(_("a user username exists.")) else: homecoming self.cleaned_data['username'] def clean(self): """ verifiy values entered 2 password fields match. note error here end in ``non_field_errors()`` because doesn't apply single field. """ if 'password1' in self.cleaned_data , 'password2' in self.cleaned_data: if self.cleaned_data['password1'] != self.cleaned_data['password2']: raise forms.validationerror(_("the 2 password fields didn't match.")) homecoming self.cleaned_data def invitecode(self): """ validate invitation code, ==happytimes """ if 'icode' != 'happytimes': raise forms.validationerror(_("you need valid invite code register, seek 1 time again or contact us!")) else: homecoming self.cleaned_data['icode']

i'm getting integrityerror column user_id not unique. doing wrong? issue seems have sqlite3 db, can't sure.

per request in commment, here traceback:

traceback: file "c:\python27\lib\site-packages\django\core\handlers\base.py" in get_response 111. response = callback(request, *callback_args, **callback_kwargs) file "c:\python27\lib\site-packages\django\views\generic\base.py" in view 48. homecoming self.dispatch(request, *args, **kwargs) file "c:\python27\lib\site-packages\registration\views.py" in dispatch 79. homecoming super(registrationview, self).dispatch(request, *args, **kwargs) file "c:\python27\lib\site-packages\django\views\generic\base.py" in dispatch 69. homecoming handler(request, *args, **kwargs) file "c:\python27\lib\site-packages\registration\views.py" in post 35. homecoming self.form_valid(request, form) file "c:\python27\lib\site-packages\registration\views.py" in form_valid 82. new_user = self.register(request, **form.cleaned_data) file "c:\python27\lib\site-packages\registration\backends\default\views.py" in register 80. password, site) file "c:\python27\lib\site-packages\django\db\transaction.py" in inner 224. homecoming func(*args, **kwargs) file "c:\python27\lib\site-packages\registration\models.py" in create_inactive_user 88. registration_profile = self.create_profile(new_user) file "c:\python27\lib\site-packages\registration\models.py" in create_profile 112. activation_key=activation_key) file "c:\python27\lib\site-packages\django\db\models\manager.py" in create 137. homecoming self.get_query_set().create(**kwargs) file "c:\python27\lib\site-packages\django\db\models\query.py" in create 377. obj.save(force_insert=true, using=self.db) file "c:\python27\lib\site-packages\django\db\models\base.py" in save 463. self.save_base(using=using, force_insert=force_insert, force_update=force_update) file "c:\python27\lib\site-packages\django\db\models\base.py" in save_base 551. result = manager._insert([self], fields=fields, return_id=update_pk, using=using, raw=raw) file "c:\python27\lib\site-packages\django\db\models\manager.py" in _insert 203. homecoming insert_query(self.model, objs, fields, **kwargs) file "c:\python27\lib\site-packages\django\db\models\query.py" in insert_query 1593. homecoming query.get_compiler(using=using).execute_sql(return_id) file "c:\python27\lib\site-packages\django\db\models\sql\compiler.py" in execute_sql 912. cursor.execute(sql, params) file "c:\python27\lib\site-packages\django\db\backends\util.py" in execute 40. homecoming self.cursor.execute(sql, params) file "c:\python27\lib\site-packages\django\db\backends\sqlite3\base.py" in execute 344. homecoming database.cursor.execute(self, query, params) exception type: integrityerror @ /accounts/register/ exception value: column user_id not unique

here is, believe relevant section of models.py:

def create_inactive_user(self, username, email, password, site, send_email=true): """ create new, inactive ``user``, generate ``registrationprofile`` , email activation key ``user``, returning new ``user``. default, activation email sent new user. disable this, pass ``send_email=false``. """ new_user = user.objects.create_user(username, email, password,) new_user.is_active = false new_user.save() registration_profile = self.create_profile(new_user) if send_email: registration_profile.send_activation_email(site) homecoming new_user create_inactive_user = transaction.commit_on_success(create_inactive_user) def create_profile(self, user): """ create ``registrationprofile`` given ``user``, , homecoming ``registrationprofile``. activation key ``registrationprofile`` sha1 hash, generated combination of ``user``'s username , random salt. """ salt = hashlib.sha1(str(random.random())).hexdigest()[:5] username = user.username if isinstance(username, unicode): username = username.encode('utf-8') activation_key = hashlib.sha1(salt+username).hexdigest() homecoming self.create(user=user, activation_key=activation_key)

the traceback indicates registration profile said user_id exists. because user table has been deleted (resetting auto_increment status of id column) registration profile's table has not been cleared. newly generated user_id clashes older, removed user_id, results in integrityerror because user_id field in registration profile's table no longer unique.

this issue encountered sqlite3, foreign key constraints not checked integrity errors default. allows delete user table or it's entries without deleting registration profiles or setting foreign key null.

django registration

No comments:

Post a Comment