user.py
6.24 KB
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# coding: utf-8
from django import forms
from django.contrib.auth import authenticate
from django.conf import settings
from forum.models import ForumUser
error_messages = {
'username': {
'required': u'必须填写用户名',
'min_length': u'用户名长度过短(3-12个字符)',
'max_length': u'用户名长度过长(3-12个字符)',
'invalid': u'用户名格式错误(英文字母开头,数字,下划线构成)'
},
'email': {
'required': u'必须填写E-mail',
'min_length': u'Email长度有误',
'max_length': u'Email长度有误',
'invalid': u'Email地址无效'
},
'password': {
'required': u'必须填写密码',
'min_length': u'密码长度过短(6-64个字符)',
'max_length': u'密码长度过长(6-64个字符)'
},
}
class SettingPasswordForm(forms.Form):
password_old = forms.CharField(min_length=6, max_length=64,
error_messages=error_messages.get('password'))
password = forms.CharField(min_length=6, max_length=64,
error_messages=error_messages.get('password'))
password_confirm = forms.CharField(required=False)
def __init__(self, request):
self.user = request.user
super(SettingPasswordForm, self).__init__(request.POST)
def clean(self):
password_old = self.cleaned_data.get('password_old')
password = self.cleaned_data.get('password')
password_confirm = self.cleaned_data.get('password_confirm')
if not (password_old and self.user.check_password(password_old)):
raise forms.ValidationError(u'当前输入旧密码有误')
if password and password_confirm and password != password_confirm:
raise forms.ValidationError(u'两次输入新密码不一致')
return self.cleaned_data
class ForgotPasswordForm(forms.Form):
username = forms.RegexField(min_length=3, max_length=12,
regex=r'^[a-zA-Z][a-zA-Z0-9_]*$',
error_messages=error_messages.get('username'))
email = forms.EmailField(min_length=4, max_length=64,
error_messages=error_messages.get('email'))
def __init__(self, *args, **kwargs):
self.user_cache = None
super(ForgotPasswordForm, self).__init__(*args, **kwargs)
def clean(self):
username = self.cleaned_data.get('username')
email = self.cleaned_data.get('email')
if username and email:
try:
self.user_cache = ForumUser.objects.get(username=username, email=email)
except ForumUser.DoesNotExist:
raise forms.ValidationError(u'所填用户名和邮箱有误')
return self.cleaned_data
def get_user(self):
return self.user_cache
class LoginForm(forms.Form):
username = forms.CharField(min_length=3, max_length=12,
error_messages=error_messages.get('username'))
password = forms.CharField(min_length=6, max_length=64,
error_messages=error_messages.get('password'))
def __init__(self, *args, **kwargs):
self.user_cache = None
super(LoginForm, self).__init__(*args, **kwargs)
def clean(self):
username = self.cleaned_data.get('username')
password = self.cleaned_data.get('password')
if username and password:
self.user_cache = authenticate(username=username, password=password)
if self.user_cache is None:
raise forms.ValidationError(u'用户名或者密码不正确')
elif not self.user_cache.is_active:
raise forms.ValidationError(u'用户已被锁定,请联系管理员解锁')
return self.cleaned_data
def get_user(self):
return self.user_cache
class RegisterForm(forms.ModelForm):
username = forms.RegexField(min_length=3, max_length=12,
regex=r'^[a-zA-Z][a-zA-Z0-9_]*$',
error_messages=error_messages.get('username'))
email = forms.EmailField(min_length=4, max_length=64,
error_messages=error_messages.get('email'))
password = forms.CharField(min_length=6, max_length=64,
error_messages=error_messages.get('password'))
password_confirm = forms.CharField(required=False)
class Meta:
model = ForumUser
fields = ('username', 'email')
def clean_username(self):
username = self.cleaned_data['username']
try:
ForumUser.objects.get(username=username)
raise forms.ValidationError(u'所填用户名已经被注册过')
except ForumUser.DoesNotExist:
if username in settings.RESERVED:
raise forms.ValidationError(u'用户名被保留不可用')
return username
def clean_email(self):
email = self.cleaned_data['email']
try:
ForumUser.objects.get(email=email)
raise forms.ValidationError(u'所填邮箱已经被注册过')
except ForumUser.DoesNotExist:
return email
def clean_password_confirm(self):
password1 = self.cleaned_data.get('password')
password2 = self.cleaned_data.get('password_confirm')
if password1 and password2 and password1 != password2:
raise forms.ValidationError(u'两次输入密码不一致')
return password2
def save(self, commit=True):
user = super(RegisterForm, self).save(commit=False)
user.set_password(self.cleaned_data['password'])
if commit:
user.save()
return user
class SettingForm(forms.Form):
username = forms.CharField() # readonly
email = forms.EmailField() # readonly
nickname = forms.CharField(min_length=3, max_length=12, required=False,
error_messages={
'min_length': u'昵称长度过短(3-12个字符)',
'max_length': u'昵称长度过长(3-12个字符)',
})
signature = forms.CharField(required=False)
location = forms.CharField(required=False)
website = forms.URLField(required=False,
error_messages={
'invalid': u'请填写合法的URL地址(如:http://f2e.im)',
})
company = forms.CharField(required=False)
github = forms.CharField(required=False)
twitter = forms.CharField(required=False)
douban = forms.CharField(required=False)
self_intro = forms.CharField(required=False)