1:开发目的:
用django实现简单的登陆注册。
2详细代码:
models.py
'''
注册
'''
class Register(models.Model):
email=models.EmailField(verbose_name="电子邮箱")
password=models.CharField(max_length=50,verbose_name="密码")
phone= models.CharField(max_length=50, verbose_name="联系电话")
class Meta:
verbose_name_plural="用户管理"
def __unicode__(self):
return self.email
forms.py
class userForm(forms.Form):
email=forms.EmailField()
password=forms.CharField()
newpassword=forms.CharField()
phone=forms.CharField()
def clean(self):
cleaned_data = super(userForm, self).clean()
password= cleaned_data.get("password")
newpassword= cleaned_data.get("newpassword")
if password and newpassword:
if password!=newpassword:
msg = u"两个密码字段不一致。"
self._errors["newpassword"] = self.error_class([msg])
return cleaned_data
def clean_email(self):
'''''验证重复email'''
emails = Register.objects.filter(email__iexact=self.cleaned_data["email"])
if not emails:
return self.cleaned_data["email"]
raise forms.ValidationError(u"该邮箱已经被使用请使用其他的")
class loginForm(forms.Form):
email=forms.EmailField()
password=forms.CharField()
captcha=CaptchaField()
def clean_email(self):
'''''验证重复email'''
emails = Register.objects.filter(email__iexact=self.cleaned_data["email"])
if emails:
return self.cleaned_data["email"]
raise forms.ValidationError(u"该邮箱没有注册,请注册!")
def clean_password(self):
'''''验证密码是否正确'''
password = Register.objects.filter(password__iexact=self.cleaned_data["password"])
if password:
return self.cleaned_data["password"]
raise forms.ValidationError(u"密码错误!")
views.py
用户注册
def regist(request):
form=userForm()
if request.method=="POST":
form=userForm(request.POST.copy())
if form.is_valid():
email = form.cleaned_data["email"]
password = form.cleaned_data["password"]
newpassword = form.cleaned_data["newpassword"]
phone = form.cleaned_data["phone"]
if password != newpassword:
return HttpResponse('重复登录密码与登录密码不一致');
reg = Register.objects.create(email=email, password=password,phone=phone)
reg.save()
return render_to_response('login1/registe_ok.html',{'form':form},context_instance=RequestContext(request));
return render_to_response('login1/register.html',{'form':form},context_instance=RequestContext(request));
#用户登录
def login(request):
if request.method == 'POST':
form = loginForm(request.POST.copy())
if form.is_valid():
human = True
email = form.cleaned_data['email']
password = form.cleaned_data['password']
user =Register.objects.filter(email__exact = email, password__exact = password)
if user:
request.session['email'] = email
return HttpResponseRedirect('/')
else:
return HttpResponseRedirect('/login/')
else:
form=loginForm()
if request.GET.get('newsn')=='1':
csn=CaptchaStore.generate_key()
cimageurl= captcha_image_url(csn)
return HttpResponse(cimageurl)
return render_to_response('login1/login.html',{'form':form},context_instance=RequestContext(request));
html模板:
1>注册页面:
<form class="form-horizontal" action="/regist/" method="post">
{% csrf_token %}
<div class="control-group">
<label class="control-label" for="inputEmail">邮箱</label>
<div class="controls">
<input type="text" value="{{ form.email.value|default:'' }}" name="email" placeholder="输入常用邮箱">
<span style="color:red;"> {{form.email.errors}}</span>
</div> </div>
<div class="control-group">
<label class="control-label" for="inputPassword">密码</label>
<div class="controls">
<input type="password" value="{{ form.password.value|default:'' }}" name="password" placeholder="登录密码">
<span style="color:red;"> {{form.password.errors}}</span>
</div> </div>
<div class="control-group">
<label class="control-label" for="inputPassword">确认密码</label>
<div class="controls">
<input type="password" name="newpassword"placeholder="确认登录密码">
<span style="color:red;"> {{form.newpassword.errors}}</span>
</div></div>
<div class="control-group">
<label class="control-label" for="inputphone">联系电话</label>
<div class="controls">
<input type="text" value="{{ form.phone.value|default:'' }}" name="phone" placeholder="联系电话">
<span style="color:red;"> {{form.phone.errors}}</span>
</div> </div>
<div class="control-group">
<div class="controls">
<label class="checkbox">
<input type="checkbox"> <a data-toggle="modal" href="#myModal" >已同意注册协议</a> </label>
<button type="submit" class="btn btn-primary ">注册</button>
</div>
</div>
</form>
</div>
<div class="span6" >
<a href="/login/" class="btn btn-primary">已有账户。直接登录!</a>
</div>
用户登录:
<form class="form-horizontal" action="/login/" method="post">
{% csrf_token %}
<div class="control-group">
<label class="control-label" for="inputEmail">邮箱</label>
<div class="controls">
<input type="text" value="{{ form.email.value|default:'' }}" name="email" placeholder="输入常用邮箱">
<span style="color:red;"> {{form.email.errors}}</span>
</div> </div>
<div class="control-group">
<label class="control-label" for="inputPassword">密码</label>
<div class="controls">
<input type="password" value="{{ form.password.value|default:'' }}" name="password" placeholder="登录密码">
<span style="color:red;"> {{form.password.errors}}</span>
</div> </div>
<div class="control-group">
<label class="control-label" for="inputphone">验证码:</label>
<div class="controls">
{{form.captcha}}
<br>
<button id='js-captcha-refresh' type="button">刷新验证码</button>
<script>
$('#js-captcha-refresh').click(function(){
$.get("?newsn=1", function(result){
$('.captcha').attr("src",result);
$('#id_captcha_0').attr("value",result.split('/')[3]);
});
return false;
});
</script>
<span style="color:red;"> {{form.captcha.errors}}</span>
</div> </div>
<div class="control-group">
<div class="controls">
<button type="submit" class="btn btn-primary">登录</button>
<a href="/regist/" class="btn btn-primary ">立即注册</a>
<a href="/changepwd/" >忘记密码?</a>
</div>
</div>
</form>