您的位置:首页 > 编程语言 > Go语言

Django 在线教育平台开发(五)用Form实现用户登入

2018-12-03 08:44 405 查看

基于类的视图

[code]#users.views
from django.views.generic.base import View

class LoginView(View):
def get(self, request):
return render(request, "login.html", {})
def post(self, request):
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:
login(request, user)
return render(request, "index.html", )
else:
return render(request, "login.html", {"msg": "用户名或密码错误!"})

基于表单的视图

在APP中创建forms.py文件

[code]from django import forms

class LoginForm(forms.Form):
username = forms.CharField(required=True)
password = forms.CharField(required=True, min_length=5)

在views.py中修改LoginView类 

[code]from .forms import LoginForm

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:
login(request, user)
return render(request,"index.html")
else:
return render(request, "login.html", {"msg": "用户名或密码错误!"})
else:
return render(request, "login.html", {"login_form": login_form})

Cookie:每次为了访问网站方便,在本地存取了一些常用信息。当再次访问服务器时,自动添加相应的信息(如自动登录)。缺点:不安全。

Session:为了解决Cookie的安全隐患,服务器只把ID(通行证)发送给用户,用户的相关信息还是存储在服务器中。但用户每次只要发送ID就可以验证相关的信息。这样做提高了安全性。

用户注册

流程与用户登录大体相同,以下仅描述部分细节。

[code]#urls.views
from django.contrib.auth.hashers import make_password

user_profile = UserProfile()
user_profile.username = user_name
user_profile.email = user_name
user_profile.is_active = False
user_profile.password = make_password(pass_word)
user_profile.save()

当存入密码时,不能明文存储,需要进行加密。

设置邮箱验证码

1.配置发送邮箱

[code]#setting
EMAIL_HOST = "smtp.sina.cn"
EMAIL_PORT = 25
EMAIL_HOST_USER = "15167771098@sina.cn"
EMAIL_HOST_PASSWORD = "xuezhihao123"
EMAIL_USE_TLS= False
EMAIL_FROM = "15167771098@sina.cn"

注意:需要对使用的邮箱开启POP3/SMTP服务

2.编写发送邮件函数

[code]from random import Random
from django.core.mail import send_mail
from users.models import EmailVerifyRecord
from MxOnline.settings import EMAIL_FROM

#生成随机验证码
def random_str(randomlength=8): ...

#发送邮件函数
def send_register_email(email, send_type="register"):
email_record = EmailVerifyRecord()
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 = "请点击下面的链接激活你的账号: hhttp://127.0.0.1:8000/active/{0}".format(code)

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

3.在views.py中执行发送函数

[code]from utils.email_send import send_register_email

class RegisterView(View):
def post(self, request):
...
send_register_email(user_name, "register")

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐