验证码的使用:
1、安装 pip install django-simple-captcha
2、将captcha 添加在settings中的installed_apps里面
3、将captcha配置url
from django.conf.urls import url,include
urlpatterns = [
url(r'^captcha/',include('captcha.urls')),
]
4、迁移同步,生成captcha所依赖的表
5、将captcha字段在forms类当中进行设置
from captcha.fields import CaptchaField
from django import forms
class UserRegisterForm(forms.Form):
email = forms.EmailField(required=True,error_messages={
'required':'邮箱必须填写'
})
password = forms.CharField(min_length=3,max_length=20,required=True,error_messages={
'required': '密码必须填写',
'min_length':'密码最少得3个',
'max_length': '密码最多20个',
})
captcha = CaptchaField(error_messages={
'invalid':'验证码错误'
})
6、在后台逻辑当中,get请求里面实例化我们的form,将form对象返回到页面
from .forms import UserRegisterForm
def user_register(request):
if request.method == 'GET':
user_register_form = UserRegisterForm()#不填不做任何验证只是显示验证码
return render(request,'users/register.html',{
'user_register_form':user_register_form
})
7、在页面上通过{{ form.captcha}} 获取验证码
邮箱验证
setting中设置邮箱参数
EMAIL_HOST = 'smtp.163.com'
EMAIL_PORT = 25
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'liuyuan1987729'
EMAIL_FROM = '[email protected]'
# # EMAIL_USE_TSL = False
在项目中创建utils工具文件夹在utils中创建send_mail_tool.写入函数
from users.models import EmailVerify
from random import randint
from django.core.mail import send_mail
from ShangOnline.settings import EMAIL_FROM
def get_random_code(code_length=8):
code_source = '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
code = ''
for i in range(code_length):
code += code_source[randint(0,len(code_source)-1)]
return code
def send_email_verify(email,send_type):
code = get_random_code()
if send_type == 'changeemail':
code = get_random_code(4)
email_ver = EmailVerify()
email_ver.email = email
email_ver.send_type = send_type
email_ver.code = code
email_ver.save()
if send_type == 'register':
send_title = '欢迎注册尚在线教育:'
send_body = '请点击下面链接进行激活\n http://127.0.0.1:8000/users/active/'+code
send_mail(send_title,send_body,EMAIL_FROM,[email])
if send_type == 'forget':
send_title = '尚在线重置密码功能:'
send_body = '请点击下面链接进行重置密码\n http://127.0.0.1:8000/users/user_reset/' + code
send_mail(send_title, send_body, EMAIL_FROM, [email])
if send_type == 'changeemail':
send_title = '尚在线修改邮箱功能:'
send_body = '您的验证码是:' + code
send_mail(send_title, send_body, EMAIL_FROM, [email])
再在views中导入使用
from utils.send_mail_tool import send_email_verify
from django.shortcuts import render,redirect,reverse,HttpResponse
from .forms import UserRegisterForm
def user_login(request):
if request.method == 'GET':
return render(request,'users/login.html',{
})
else:
user_login_form = UserLoginForm(request.POST)
if user_login_form.is_valid():
email = user_login_form.cleaned_data['email']
password = user_login_form.cleaned_data['password']
a = authenticate(username=email,password=password)
if a:
if a.is_start:
login(request,a)
msg = UserMessageInfo()
msg.userinfo = a.id
msg.message = '欢迎登录尚在线'
msg.save()
# return redirect(reverse('index'))
url = request.COOKIES.get('url','/')
ret = redirect(url)
ret.delete_cookie('url')
return ret
else:
return HttpResponse('请去激活')
else:
return render(request, 'users/login.html', {
'msg':'用户名或者密码有误'
})
else:
return render(request,'users/login.html',{
'user_login_form':user_login_form
})
#处理邮箱返回的url
def user_active(request,code):
if code:
email_ver = EmailVerify.objects.filter(code=code)[0]
email = email_ver.email
user = UserProfile.objects.filter(email=email)[0]
user.is_start = True
user.save()
return redirect(reverse('users:user_login'))
else:
pass