/
forms.py
105 lines (83 loc) · 4.87 KB
/
forms.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# -*- coding: utf-8 -*-
import re
import datetime
from django import forms
from django.contrib.auth.models import User
from django.utils.translation import ugettext as _
from django.conf import settings
try:
from openid.yadis import xri
except ImportError:
from yadis import xri
from authopenid.models import UserAssociation
class OpenidSigninForm(forms.Form):
openid_url = forms.CharField(max_length=255, widget=forms.widgets.TextInput(attrs={'class': 'required openid'}))
def clean_openid_url(self):
"""
Проверка введённого OpenID идентификатора
"""
if 'openid_url' in self.cleaned_data:
openid_url = self.cleaned_data['openid_url']
if xri.identifierScheme(openid_url) == 'XRI' and getattr(
settings, 'OPENID_DISALLOW_INAMES', False
):
raise forms.ValidationError(_('i-names are not supported'))
return self.cleaned_data['openid_url']
attrs_dict = { 'class': 'required login' }
username_re = re.compile(r'^[\w]+$', re.U)
class OpenidRegisterForm(forms.Form):
username = forms.CharField(label=_(u'User name'), max_length=30, widget=forms.widgets.TextInput(attrs=attrs_dict))
email = forms.EmailField(label=_(u'Email address'), widget=forms.TextInput(attrs=dict(attrs_dict, maxlength=200)))
website = forms.URLField(label=_(u'Ваш вебсайт'), required=False, max_length=255, widget=forms.TextInput())
birthday = forms.DateField(label=_(u'Ваш день рождения'), required=False, help_text=_(u'Ведите дату в формате: ГГГГ-ММ-ДД'), widget=forms.TextInput())
about = forms.CharField(label=_(u'Немного о себе'), required=False, widget=forms.Textarea())
def clean_email(self):
if 'email' in self.cleaned_data:
try:
user = User.objects.get(email = self.cleaned_data['email'])
except User.DoesNotExist:
return self.cleaned_data['email']
except User.MultipleObjectsReturned:
raise forms.ValidationError(_(u'Такие пользователи уже зарегистрированы'))
raise forms.ValidationError(_(u"Такой электронный адрес уже зарегистрирован в нашей базу. Попробуйте другой."))
else:
return self.cleaned_data['email']
def clean_username(self):
""" test if username is valid and exist in database """
if 'username' in self.cleaned_data:
if not username_re.search(self.cleaned_data['username']):
raise forms.ValidationError(_(u"Можно использовать цыфробуквы и знаки подчёркивания"))
try:
user = User.objects.get(
username__exact = self.cleaned_data['username']
)
except User.DoesNotExist:
return self.cleaned_data['username']
except User.MultipleObjectsReturned:
raise forms.ValidationError(_(u'Уже есть несколько пользователь с таким именем, используйте другие.'))
self.user = user
raise forms.ValidationError(_(u"Такой пользователь уже зарегистрирован, используёте другое имя."))
class AssociateOpenID(forms.Form):
openid_url = forms.CharField(max_length=255,
widget=forms.widgets.TextInput(attrs={'class': 'required openid'}))
def __init__(self, user, *args, **kwargs):
super(AssociateOpenID, self).__init__(*args, **kwargs)
self.user = user
def clean_openid_url(self):
""" test if openid is accepted """
if 'openid_url' in self.cleaned_data:
openid_url = self.cleaned_data['openid_url']
if xri.identifierScheme(openid_url) == 'XRI' and getattr(
settings, 'OPENID_DISALLOW_INAMES', False
):
raise forms.ValidationError(_(u'i-names are not supported'))
try:
rel = UserAssociation.objects.get(openid_url__exact=openid_url)
except UserAssociation.DoesNotExist:
return self.cleaned_data['openid_url']
if rel.user != self.user:
raise forms.ValidationError(_(u"This openid is already \
registered in our database by another account. Please choose another."))
raise forms.ValidationError(_(u"You already associated this openid to your account."))
class OpenidDissociateForm(OpenidSigninForm):
openid_url = forms.CharField(max_length=255, widget=forms.widgets.HiddenInput())