ThinkPHP完毕轻巧登入功效_php实例_脚本之家,Dja
分类:计算机编程

思路:前台输入账号密码,后台自定义贰个函数checkNamePwd(卡塔尔(英语:State of Qatar)用于注明账号密码正确与否,在调整器里调用,在这之中,checkNamePwd(卡塔尔(英语:State of Qatar)方法求证账号密码正确性是第一通过账号查找密码,然后把查找寻来的密码和客户输入的密码比较,相近则登录成功,不然登陆退步!

1.发邮件配置

自个儿利用的Tencent公司邮箱来发送邮件,首先供给登入邮箱确认保证权力的安装,如下图

image

image

在settings.py中增多邮箱配置

#配置邮箱发送者
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'   #email后端
EMAIL_USE_TLS = False   #是否使用TLS安全传输协议
EMAIL_USE_SSL = True     #是否使用SSL加密,qq企业邮箱要求使用
EMAIL_HOST = 'smtp.exmail.qq.com'    #发送邮件的邮箱 的 SMTP服务器,这里用了qq企业邮箱
EMAIL_PORT = 465    #发件箱的SMTP服务器端口
EMAIL_HOST_USER = 'liyong@7xiaofu.com'  #发送邮件的邮箱地址
EMAIL_HOST_PASSWORD = 'XXXXXX'  #发送邮件的邮箱密码
DEFAULT_FORM_EMAIL = 'liyong <liyong@7xiaofu.com>'

在apps路线下创设’utils‘python package文件夹,并创办email_send.py文件
亟待引进系统的“from django.core.mail import send_mail”
代码如下

from random import Random
from django.core.mail import send_mail

from users.models import EmailVerifyRecord
from MxOnline.settings import EMAIL_HOST_USER


def random_str(randomlength=8):
str = ''
chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
length = len(chars) - 1
random = Random()
for i in range(randomlength):
str  = chars[random.randint(0, length)]
return str


def send_email(email, send_type='register'):
email_record = EmailVerifyRecord()
if send_type == 'update_email':
code = random_str(4)
else:
code = random_str(16)
email_record.code = code
email_record.email = email
email_record.send_type = send_type
email_record.save()

email_title = ''
email_body = ''
if send_type == 'register':
email_title = '注册激活链接'
email_body = '请点击下面的链接激活你的账号: http://127.0.0.1:8000/active/{0}'.format(code)

send_status = send_mail(email_title,email_body,EMAIL_FROM,[email])
if send_status:
pass
elif send_type == 'forget':
email_title = '密码重置链接'
email_body = '请点击下面的链接重置你的密码: http://127.0.0.1:8000/reset/{0}'.format(code)

send_status = send_mail(email_title, email_body, EMAIL_FROM, [email])
if send_status:
pass
elif send_type == 'forget':
email_title = '邮箱修改验证码'
email_body = '你的邮箱验证码为:{0}'.format(code)

send_status = send_mail(email_title, email_body, EMAIL_HOST_USER, [email])
if send_status:
pass

在views.py中的注册view类中增添发送邮件的应用

from utils.email_send import send_email
//example@example.com接收者邮箱
send_email(“example@example.com”, 'register')

先是在模型类定义三个函数checkNamePwd(卡塔尔(قطر‎

2.验证码的行使

首先须要在设想景况中设置‘django-simple-captcha’和‘pillow’

pip install django-simple-captcha 用于验证码
pip install pillow 图像处理

然后在settings.py中的“INSTALLED_APPS”添加“ 'captcha', ”
独家施行一次“makemigrations”和“migration”

在RegisterForm中增添检验项

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' : '验证码错误'})

在html中使用的职位增多

<div>
<label>验 证 码</label>
{{ register_form.captcha }}
</div>
public function checkNamePwd { //①先根据$name查询是否存在指定名字的记录 //通过$name查找整条记录 $res = $this->where->find { //②把查询到的记录的密码与用户输入的密码比较 if ($res['mg_pwd']===$pwd) { return $res; } }else{ return null; } }

3.页面class

事情发生从前写页面是由此艺术

# login in method
def user_login(request):
if request.method == 'POST':
username = request.POST.get('username','')
password = request.POST.get('password','')

user = authenticate(username=username, password=password)
if user is not None:
login(request,user)
return render(request, 'index.html')
else:
return render(request, 'login.html',{'msg':'用户名或者密码错误'})
elif request.method == 'GET':
return render(request,'login.html',{})

也可经过下边包车型客车艺术

from django.views.generic.base import View


# login in class 登录
class LoginView(View):
def get(self,request):
return render(request, 'login.html',{})
def post(self,request):
login_form = LoginForm(request.POST)
if login_form.is_valid():
user_name = request.POST.get('username', '')
pass_word = request.POST.get('password', '')
user = authenticate(username=user_name, password=pass_word)
if user is not None:
if user.is_active:
login(request,user)
return render(request, 'index.html')
else:
return render(request, 'login.html', {'msg' : '用户未激活'})
else:
return render(request, 'login.html', {'msg' : '用户名或密码错误'})
else:
return render(request, 'login.html', {'login_form' : login_form})

LoginForm能够节省上边方法恐怕类中对于表单提交的参数的管理逻辑

from django import forms


class LoginForm(forms.Form):
username = forms.CharField(required=True) #required=True 表示不可为空
password = forms.CharField(required=True, min_length=5)

上边二种登陆页面的主意在urls中的不同,分别为:

user_login:
from users.views import user_login
url(r'^login/$', user_login, name='login'),

LoginView:
from users.views import LoginView
from django.views.generic import TemplateView
url(r'^login/$', LoginView.as_view(), name='login'),

调控器接受客商输入的信息并调用checkNamePwd(卡塔尔方法

4.登陆和注册

在类型的中的登陆和注册中要求调用系统的记名和挂号形式
导入“from django.contrib.auth import authenticate, login, logout”

user = authenticate(username=user_name, password=pass_word卡塔尔国//验证账号密码是还是不是精确
if user is not None://表示账号密码正确然后调用系统的“login(request,user卡塔尔国”到达登入功用

抽离的时候只需调用“logout(request卡塔尔(قطر‎”就能够

$manager = new ModelManagerModel();$name = $_POST['admin_user'];$pwd = $_POST['admin_psd'];//验证成功返回整条记录,否则返回null$info = $manager->checkNamePwd; if  { //验证成功,给用户信息session持久化操作session('admin_id',$info['mg_id']);session('admin_name',$info['mg_name']); //跳转后台首页 $this->redirect; }else{ echo "用户名或密码错误";}

5.忘记密码-重新设置

重新载入参数密码的逻辑是首先输入邮箱提交申请,然后点击邮箱收到的链接,在链接中有标记客户的音讯,查找拿到客商的信箱后将邮箱传递到输入密码的页面,然后将三次输入的密码和邮箱地址一块传递到重新载入参数密码的拍卖逻辑中
经过上面代码来传递邮箱

return render(request, 'password_reset.html', {'email' : email})

设置密码的页面

<li>
新 密 码 :
<input type="password" name="password" id="pwd" placeholder="6-20位非中文字符">
<i></i>
</li>
<li>
确定密码:
<input type="password" name="password2" id="repwd" placeholder="6-20位非中文字符">
<i></i>
</li>
<li>
<input type="hidden" name="email" value="{{ email }}">
</li>

以上就是本文的全部内容,希望对大家的求学抱有助于,也期待大家多都赐教脚本之家。

本文由澳门新葡8455手机版发布于计算机编程,转载请注明出处:ThinkPHP完毕轻巧登入功效_php实例_脚本之家,Dja

上一篇:ThinkPHP中create方法自动验证表单信息_php实例_脚本 下一篇:没有了
猜你喜欢
热门排行
精彩图文
  • 应用程式开拓平台,Smobiler开采平台
    应用程式开拓平台,Smobiler开采平台
    最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 .Net语言 APP开发平台——Smobiler学习日志:如何在手机上实现电
  • NET开拓能源大全
    NET开拓能源大全
    目录 API 应用框架(ApplicationFrameworks) 应用模板(ApplicationTemplates) 人工智能(ArtificialIntelligence) 程序集处理(AssemblyManipulation) 资源(Assets) 认证和授
  • STM32就学笔记之C语言篇
    STM32就学笔记之C语言篇
    【unsigned】 1、rewind(FILE *卡塔尔(英语:State of Qatar):回到文件开头处 2、fprintf(), fscanf(), fgets(), fputs() (1)、fprintf(#FILE *restrict#, #const char *restrict,...#卡塔尔(英语
  • python面向对象三大特征,面向对象
    python面向对象三大特征,面向对象
    面向对象-组合 风流罗曼蒂克、面向进度与面向对象的简要介绍 一、继承 大器晚成 什么是多态动态绑定(在这里起彼伏的背景下行使时,一时也称得上多
  • HttpRuntime的认知与抓好明白,异步HTTP乞请操作
    HttpRuntime的认知与抓好明白,异步HTTP乞请操作
    一、说明 上边最早介绍HttpRuntime的Web.config里的构造 1卡塔尔(英语:State of Qatar) 那些类 是本身 在安分守己项目中,优化驱除实际难题时,不参照第三方代码