Django之注册登录注销
阅读量(4095) | 发表 于 2010-06-05 19:02:59
1 url(r'^$', 'accounts.views.index',name="index"), 2 url(r'^accounts/index$', 'accounts.views.index',name="accounts_index"), 3 url(r'^accounts/register$', 'accounts.views.register',name="register"), 4 url(r'^accounts/login$', 'accounts.views.login',name="login"), 5 url(r'^accounts/logout$', 'accounts.views.logout',name="logout"),
def index(request):
pass
def register(request):
pass
def login(request):
pass
def logout(request):
passtemplate_var={"w":_(u"欢迎您 游客!")}
if request.user.is_authenticated():
template_var["w"]=_(u"欢迎您 %s!")%request.user.username
return render_to_response("accounts/welcome.html",template_var,\
context_instance=RequestContext(request))class RegisterForm(forms.Form):
email=forms.EmailField(label=_(u"邮件"),max_length=30,widget=forms.TextInput(attrs={'size': 30,}))
password=forms.CharField(label=_(u"密码"),max_length=30,widget=forms.PasswordInput(attrs={'size': 20,}))
username=forms.CharField(label=_(u"昵称"),max_length=30,widget=forms.TextInput(attrs={'size': 20,}))
def clean_username(self):
'''验证重复昵称'''
users = User.objects.filter(username__iexact=self.cleaned_data["username"])
if not users:
return self.cleaned_data["username"]
raise forms.ValidationError(_(u"该昵称已经被使用请使用其他的昵称"))
def clean_email(self):
'''验证重复email'''
emails = User.objects.filter(email__iexact=self.cleaned_data["email"])
if not emails:
return self.cleaned_data["email"]
raise forms.ValidationError(_(u"该邮箱已经被使用请使用其他的"))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"]
user=User.objects.create_user(username,email,password)
user.save()
_login(request,username,password)#注册完毕 直接登陆
return HttpResponseRedirect(reverse("index"))
template_var["form"]=form
return render_to_response("accounts/register.html",template_var,\
context_instance=RequestContext(request))def _login(request,username,password):
'''登陆核心方法'''
ret=False
user=authenticate(username=username,password=password)
if user:
if user.is_active:
auth_login(request,user)
ret=True
else:
messages.add_message(request, messages.INFO, _(u'用户没有激活'))
else:
messages.add_message(request, messages.INFO, _(u'用户不存在'))
return ret_login(request,username,password)抽象出来,我们接下来做登录视图的时候,用到它。代码如下:
def login(request):
'''登陆视图'''
template_var={}
form = LoginForm()
if request.method == 'POST':
form=LoginForm(request.POST.copy())
if form.is_valid():
_login(request,form.cleaned_data["username"],form.cleaned_data["password"])
return HttpResponseRedirect(reverse("index"))
template_var["form"]=form
return render_to_response("accounts/login.html",template_var,\
context_instance=RequestContext(request))class LoginForm(forms.Form):
username=forms.CharField(label=_(u"昵称"),max_length=30,widget=forms.TextInput(attrs={'size': 20,}))
password=forms.CharField(label=_(u"密码"),max_length=30,widget=forms.PasswordInput(attrs={'size': 20,}))from django.contrib.auth import authenticate, login as auth_login ,logout as auth_logout
def logout(request):
'''注销视图'''
auth_logout(request)
return HttpResponseRedirect(reverse('index'))



标签: Python Django开发环境 Django
25条评论
baoyalv 说:
2010-06-25 12:30:30
本文是一个简单的实例,旨在初学者,非初学者就免得看了...djangobook.py3k.cn 写的东西很广很详细,耐心看收获也不少。龅牙驴上写点简单的实例,只想让刚刚接触Django的朋友快速清晰django的学习方法。再有
djangobook.py3k.cn的东西,应该没有建立在Django1.2上,用上Django的一些内置方法,可以发现点新的东西,比如Message的使用,注册username的约束等等这些。
谢谢FeiFei的提醒:-)
hqhwell 说:
2010-12-20 03:09:52
utf8没问题了吧,怎么下载的代码启动后提示:
'utf8', 'F:\\Study\\Python\\\xbc\xd3\xb0\xe0\xc9\xea\xc7\xeb\xc9\xf3\xc5\xfa\xcf\xb5\xcd\xb3\\1220\\level_1\\templates', 16, 17, 'unexpected code byte')
anly_love 说:
2010-12-25 11:36:58
为什么,我把admin管理后台也装上去了,这个也能登陆注册,成功后不会出现注销。我看了,静态页面的判断也正常,单独放在一个项目中一切和上面实例一样,正常。
游客 yuxcer 说:
2011-04-16 12:15:07
新手求助啊,下载了代码后运行,打开默认网页出现以下错误
DatabaseError at /
no such table: django_session
这是什么原因呢?数据库错误?
游客 嗯哼 说:
2012-01-01 02:35:16
login()中:form = LoginForm( request.POST.copy() )这个语句不懂,LoginForm这个类不接受任何一个参数啊
游客 2goo 说:
2012-01-01 11:28:40
LoginForm继承forms.Form的,而forms.Form能接受字典的参数。request.POST.copy()就是一个字段,如{'username','..','password':'...','email':'...'}
panjj 说:
2010-06-05 11:46:55
通过这个实例发现Django内置用户名可以是中文的了,官方文档只说增加了一些如@等之类的字符,并没有说支持中文。