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
#!-*- 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"改邮箱已经被使用"));