django创建登录和注册,注销策略
第一步:创建应用
1
|
python manage.py startapp accounts
|
第二步:url规则添加
1
2
3
4
5
|
#用户的处理中心
url(r
'^accounts/$'
,
'accounts.views.index'
,name
=
'accounts_home'
),
url(r
'^accounts/register$'
,
'accounts.views.register'
,name
=
'accounts_register'
),
url(r
'^accounts/login$'
,
'accounts.views.login'
,name
=
'accounts_login'
),
url(r
'^accounts/logout$'
,
'accounts.views.logout'
,name
=
'accounts_logout'
),
|
第三步:action的添加
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
|
#!-*- coding=utf-8 -*-
'''
用户中心
'''
def
home(request):
pass
'''
用户注册页
'''
def
register(request):
pass
'''
用户登录页
'''
def
login(request):
pass
'''
用户注销页accounts
'''
def
logout(request):
pass
|
第四步:template文件(模板文件的添加)的添加
注册页面(这个页面根据自己的需求定义,项目不同,设计不同)
登录页面(这个页面根据自己的需求定义,项目不同,设计不同)
个人中心(这个页面根据自己的需求定义,项目不同,设计不同)
第五步:完善action
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
|
#!-*- coding=utf-8 -*-
from
django.shortcuts
import
render_to_response
from
django.template
import
RequestContext
from
django.http
import
HttpResponseRedirect
from
django.core.urlresolvers
import
reverse
from
django.utils.translation
import
ugettext as _
from
django
import
forms
from
django.contrib.auth
import
authenticate, login as auth_login, logout as auth_logout
from
django.contrib.messages
import
constants as messages
from
django.contrib
import
messages
from
django.contrib.auth.models
import
User
def
home(request):
'''用户中心'''
if
request.user.is_authenticated():
user
=
request.user;
else
:
user
=
request.user;
return
render_to_response(
'accounts/home.html'
,{
'user'
:user},context_instance
=
RequestContext(request));
def
register(request):
'''用户注册页'''
template_var
=
{}
form
=
RegisterForm()
if
request.method
=
=
"POST"
:
form
=
RegisterForm(request.POST.copy())
if
form.is_valid():
username
=
form.cleaned_data[
"username"
]
email
=
form.cleaned_data[
"email"
]
password
=
form.cleaned_data[
"password"
]
repassword
=
form.cleaned_data[
"repassword"
]
if
password !
=
repassword:
return
HttpResponse(
'重复登录密码与登录密码不一致'
);
user
=
User.objects.create_user(username, email, password)
user.save()
validate_login(request, email, password)
return
HttpResponseRedirect(reverse(
"accounts_home"
))
return
render_to_response(
'accounts/register.html'
,{
'form'
:form},context_instance
=
RequestContext(request));
def
validate_login(request, username, password):
'''验证用户登录'''
return_value
=
False
user
=
authenticate(username
=
username,password
=
password)
if
user:
if
user.is_active:
auth_login(request,user)
return_value
=
True
else
:
messages.add_message(request, messages.INFO, _(u
'此账户尚未激活,请联系管理员'
))
else
:
messages.add_message(request, messages.INFO, _(u
'此账户不存在,请联管理员'
))
return
return_value
def
login(request):
'''用户登录页'''
template_var
=
{}
form
=
LoginForm()
if
request.method
=
=
"POST"
:
form
=
LoginForm(request.POST.copy())
if
form.is_valid():
validate_login(request, form.cleaned_data[
"username"
], form.cleaned_data[
"password"
])
return
HttpResponseRedirect(reverse(
'accounts_home'
))
template_var[
"form"
]
=
form
return
render_to_response(
'accounts/login.html'
, template_var, context_instance
=
RequestContext(request));
def
logout(request):
'''用户注销页'''
auth_logout(request)
return
HttpResponseRedirect(reverse(
'home'
))
class
LoginForm(forms.Form):
username
=
forms.CharField(label
=
_(u
"登录账号"
), widget
=
forms.TextInput(attrs
=
{
'placeholder'
:
'登录账号'
,
'class'
:
'input-block-level'
}))
password
=
forms.CharField(label
=
_(u
"登录密码"
),
widget
=
forms.PasswordInput(attrs
=
{
'placeholder'
:
'登录密码'
,
'class'
:'
input
-
block
-
level'}))
class
RegisterForm(forms.Form):
'''注册表单'''
username
=
forms.CharField(label
=
_(u
"登录账号"
), widget
=
forms.TextInput(attrs
=
{
'placeholder'
:
'登录账号'
,
'class'
:
'input-block-level'
}))
email
=
forms.EmailField(label
=
_(u
"邮件地址"
), widget
=
forms.TextInput(attrs
=
{
'placeholder'
:
'登录邮箱'
,
'class'
:
'input-block-level'
}))
password
=
forms.CharField(label
=
_(u
"登录密码"
),
widget
=
forms.PasswordInput(attrs
=
{
'placeholder'
:
'登录密码'
,
'class'
:'
input
-
block
-
level'}))
repassword
=
forms.CharField(label
=
_(u
"重复登录密码"
),
widget
=
forms.PasswordInput(attrs
=
{
'placeholder'
:
'重复登录密码'
,
'class'
:'
input
-
block
-
level'}))
def
clean_username(
self
):
'''验证昵称'''
username
=
User.objects.
filter
(username__iexact
=
self
.cleaned_data[
"username"
])
if
not
username:
return
self
.cleaned_data[
"username"
];
raise
forms.ValidationError(_(u
"该昵称已经被使用"
));
def
clean_email(
self
):
'''验证email'''
email
=
User.objects.
filter
(email__iexact
=
self
.cleaned_data[
"email"
])
if
not
email:
return
self
.cleaned_data[
"email"
];
raise
forms.ValidationError(_(u
"改邮箱已经被使用"
));
|