首先我们需要导入我们需要的包:
import re
from django.contrib.auth.hashers import make_password,check_password
from django.core.mail import send_mail
from django.conf import settings
注册的案列视图如下:
class RegsterView(View):
'''用户注册视图'''
def get( self, request):
''''渲染视图'''
return render(request, 'register.html')
def post( self, request ):
'''用户注册逻辑'''
# 首要判断用户协议是否勾选,如未勾选 下面条件皆不执行
allow = request.POST.get('allow')
if allow != 'on': #allow勾选后的值为 -->on, 不勾选为 空
return render(request, 'register.html',{'error':'请同意用户协议'})
# 获取表单账号,密码,email ,并判断是否有某一项 未输入
user_name = request.POST.get("user_name")
pwd = request.POST.get("pwd")
cpwd = request.POST.get("cpwd")
email = request.POST.get("email")
if not all([user_name,pwd,cpwd,email]):
return render(request, 'register.html',{'error':'输入参数不全'})
u = models.USer.objects.filter(username = user_name).first()
# 如果不为空,获取user表对象根据filter()判断账号在数据库是否已经存在,如存在注册失败
if u:
return render(request, 'register.html',{'error':'已有同名账号'})
# 判断两次密码是否相同
if pwd != cpwd:
return render(request, 'register.html',{'error':'两次输入密码不相同'})
#正则表达式判断邮箱格式是否正确
if not re.match ( '^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$', email ):
return render ( request, 'register.html', {'error': '邮箱格式不正确'} )
#获取user表对象,进行数据提交入库
u = models.USer()
u.username = user_name
u.password = make_password(pwd)
u.email = email
u.save()
#邮箱发送
'''/*
在此之前 需要先到 setting.py 中 配置 发送人的信息 :
#这里我用的163邮箱 做的实例
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.163.com' # 发送邮件的服务器
EMAIL_PORT = 25 # 发送邮件的端口号
# 发送邮件到邮箱
EMAIL_HOST_USER = '发件人账号邮箱' # 发件人 用户名
EMAIL_HOST_PASSWORD = '发件人的授权码' # 发件人授权码
# 收件人看到到发件人
EMAIL_FORM = '收件人看到的发件人'
*/'''
title = '激活邮件' #标题
#内容
message = '<a href="http://127.0.0.1:8088/user/active?user_id={}">激活</a>'.format(u.id)
#send_mail() 发送邮件, 第一参数 : 标题 第二参数 : 内容 第三参数:收件人看到的发件人,第四参数: 收件人邮箱
#html_message 转义解析内容的html标签, 不然会直接显示字符串。
send_mail (title, message, settings.EMAIL_FORM, [email], html_message=message)
return render (request, 'register.html', {'error': '注册成功'})
邮箱发送了,我们需要对数据库中的激活装态进行从新赋值
class Email(View):
'''邮箱激活'''
def get( self ,request):
'''*
获取收件人点击激活跳转 所带过来的参数ID
并从user表中判断是否有对应的记录
判断记录是否存在
如果存在 就给user 表所对应的记录的激活状态字段属性 改default=1 表示激活状态
并使用 save() 提交入库。
*'''
user_id =request.GET.get("user_id")
u = models.USer.objects.filter(id=user_id).first()
if not u:
return HttpResponse("用户不存在")
u.is_status = 1
u.save()
return redirect( 'user:login')
当我们状态激活,证明账号已经可用了 ,现在我们开始尝试登录,密码解析,并进行判断:
class Login(View):
def get( self, request):
'''渲染页面'''
return render(request, 'login.html')
def post( self, request):
'''登录逻辑判断'''
'''
*
获取表单传送账号密码
跟据获取到的账号,从数据库user表中找相等的账号 判断此账号是否存在
账号存在则 判断密码 和数据库对应的密码是否相等
因存入数据库时 密码是加密形式
所 我们获取加密密码时需要使用 check_password(pwd,pwd)第一位置时明文密码,第二位置是加密密码,得出的结果是布尔类型 如果是True
则密码相同, 如果为False则 密码不等。
*
'''
username = request.POST.get('username')
pwd = request.POST.get('pwd')
user_name=models.USer.objects.filter(username=username).first()
if not user_name:
return render(request, 'login.html', {"error":'账号不存在'})
if check_password(pwd,user_name.password):
return render(request, 'login.html', {"error":'账号或密码错误'})
return render(request, 'index.html', {"error":'登录成功'})
当然这是最简单的注册登录逻辑, 仅供参考!