1.(验证码配置)安装Django Simple Captcha,加入'captcha',添加url路径(url(r'^captcha/', include('captcha.urls'))),mm迁移操作;
配置文档:http://django-simple-captcha.readthedocs.io/en/latest/usage.html#installation
2.(验证码实现)
class RegisterForm(forms.Form):
email = forms.EmailField(required=True)
password = forms.CharField(required=True, min_length=5)
captcha = CaptchaField()
def get(self, request):
register_form = RegisterForm()
return render(request, "register.html", {'register_form':register_form})
前端界面配置:{{register_form.captcha }}
3.注册功能具体实现
(1)后端验证:对于web项目,即使在前端已经做了验证以外,后端工程师依然需要做验证工作
from captcha.fields import CaptchaField
class RegisterForm(forms.Form):
#传入的必须是邮箱啊!
email = forms.EmailField(required=True)
password = forms.CharField(required=True, min_length=5)
captcha = CaptchaField(error_messages={"invalid": u"验证码错误"})
(2)编写view
def post(self, request):
#一定要输入的是邮箱地址名
register_form = RegisterForm(request.POST)
if register_form.is_valid():
user_name = request.POST.get("email", "")
if UserProfile.objects.filter(email=user_name):
return render(request, "register.html", {"register_form": register_form, "msg": "用户已经存在"})
user_password = request.POST.get("password", "")
user_profile = UserProfile()
user_profile.username = user_name
user_profile.email = user_name
user_profile.password = make_password(user_password)
user_profile.save()
return render(request, "index.html")
else:
return render(request, "register.html", {"register_form": register_form})
(3)url的配置:
url('^register/$', RegisterView.as_view(), name="register")
(4)前端界面的配置:
<div class="tab-form">
<form id="email_register_form" method="post" action="{% url 'register' %}" autocomplete="off">
<input type='hidden' name='csrfmiddlewaretoken' value='gTZljXgnpvxn0fKZ1XkWrM1PrCGSjiCZ' />
<div class="form-group marb20 {% if register_form.errors.email %}errorput{% endif %}">
<label>邮 箱</label>
<input type="text" id="id_email" name="email" value="{{ register_form.email.value }}" placeholder="请输入您的邮箱地址" />
</div>
<div class="form-group marb8 {% if register_form.errors.password %}errorput{% endif %}">
<label>密 码</label>
<input type="password" id="id_password" name="password" value="{{ register_form.password.value }}" placeholder="请输入6-20位非中文字符密码" />
</div>
<div class="form-group marb8 captcha1 {% if register_form.errors.captcha %}errorput{% endif %} ">
<label>验 证 码</label>
{{register_form.captcha }}
</div>
<div class="error btns" id="jsEmailTips">{% for key,error in register_form.errors.items %}{{ error }}{% endfor %}{{ msg }}</div>
<div class="auto-box marb8">
</div>
<input class="btn btn-green" id="jsEmailRegBtn" type="submit" value="注册并登录" />
<input type='hidden' name='csrfmiddlewaretoken' value='5I2SlleZJOMUX9QbwYLUIAOshdrdpRcy' />
{% csrf_token %}
</form>
</div>
4.用户注销的实现
(1)view类的实现
from django.contrib.auth import logout
from django.http import HttpResponse, HttpResponseRedirect
from django.core.urlresolvers import reverse
class LogoutView(View):
"""
用户登出
"""
def get(self, request):
logout(request)
return HttpResponseRedirect(reverse("index"))
(2)url的配置: url('^logout/$', LogoutView.as_view(), name="logout"),
(3)前端配置:<a class="fr" href="{% url 'logout' %}">退出</a>