博客目录:
......
十三、基于Django+mysql的点餐系统设计-第十三篇(H5点餐:订单的展示)
十四、Django+mysql(大堂点餐:需求分析和代码逻辑实现梳理、首页展示)
十五、基于Django+mysql的点餐系统设计-第十五篇(大堂点餐:登录)
十六、Django+mysql-第十六篇(大堂点餐:登录页面校验、登录中间件)
本章源码下载地址:https://github.com/hopeSuceess/testorder/tree/testorder_2022071001
本章重点讲的功能是登录页面的各种异常情况校验。在系统正式工作流程中,不仅要保障正常流,用户的异常操作也要考虑。登陆页面有商铺、验证码、账号、密码等选择/填写项,那么就需要对这些字段的填写进行校验,包括但不限于非空、填写错误等异常操作。
异常登录的校验主要在执行登录的逻辑实现,具体的判断在后端,异常反馈在前端。在web/views/index.py的dologin函数添加判断校验逻辑
def dologin(request):
''' 执行登录操作 '''
try:
#执行是否选择店铺判断
if request.POST['shop_id'] == '0':
return redirect(reverse('web_login')+"?typeinfo=1")
# 执行验证码的校验
if request.POST['code'] != request.session['verifycode']:
return redirect(reverse('web_login')+"?typeinfo=2")
# 根据登录账号获取登录者信息
user = User.objects.get(username=request.POST['username'])
# 判断当前用户是否正常或管理员
if user.status == 6 or user.status == 1:
# 判断登录密码是否相同
import hashlib
md5 = hashlib.md5()
s = request.POST['pass'] + str(user.password_salt) # 从表单重获取密码并添加干扰值
md5.update(s.encode('utf-8')) # 将要产生md5的字串放进去
if user.password_hash == md5.hexdigest(): # 获取md5值
print("登录成功!")
# 将当前登录成功的用户信息以webuser为key写入到session中
request.session['webuser'] = user.toDict()
# 获取当前店铺信息
shopob = Shop.objects.get(id=request.POST['shop_id'])
request.session['shopinfo'] = shopob.toDict()
# 获取当前店铺中所有菜品类别和菜品信息
clist = Category.objects.filter(shop_id = shopob.id, status=1)
categorylist = dict() # 菜品类别(内含有菜品信息)
productlist = dict() # 菜品信息
for vo in clist:
c = {'id': vo.id, 'name': vo.name, 'pids':[]}
plist = Product.objects.filter(shop_id=shopob.id,category_id=vo.id,status=1)
for p in plist:
c['pids'].append(p.toDict())
productlist[p.id] = p.toDict()
categorylist[vo.id] = c
request.session['categorylist'] = categorylist #菜品类别列表
request.session['productlist'] = productlist #菜品列表
#重定向到前台大堂点餐首页
return redirect(reverse("web_index"))
else:
return redirect(reverse('web_login')+"?typeinfo=5")
else:
return redirect(reverse('web_login')+"?typeinfo=4")
except Exception as err:
print (err)
return redirect(reverse('web_login')+"?typeinfo=3")
后端判断逻辑最终需要通过前端展现出来,前端写一个p模块,接收后端传过来的信息并展现在页面上
......
{% if request.GET.typeinfo == '1' %}
请选择您所在的商铺!
{% elif request.GET.typeinfo == '2' %}
验证码错误!
{% elif request.GET.typeinfo == '3' %}
登录账号不存在!
{% elif request.GET.typeinfo == '4' %}
此用户非管理账号!
{% elif request.GET.typeinfo == '5' %}
登录密码错误!
{% endif %}
......
启动工程,访问http://127.0.0.1:8000/login,当不输入信息或输入有误时,有了报错提示:
登录校验的功能是不是很简单,接下来继续讲登录中间件。现在直接访问登录页面,账号密码等信息填写正确可以跳转到餐品首页,如果有人跳过登录,直接访问餐品首页,该怎么办呢?这里就用到了登陆中间件去拦截:在访问餐品首页等页面的链接时,首要校验是否有用户信息,有用户信息可以正常访问,没有用户信息,拦截访问链接强制跳转到登录页面。
登录短链接/mobile/register,/mobile/doregister可以直接访问,其他短链接访问都需要进行登录判断,在缓存中匹配到用户信息,可以正常操作;如果在缓存中没有匹配到用户信息,重定向到登录页。
#判断大堂点餐是否登录
urllist = ['login', 'dologin','verify']
if re.match(r"/web", path) and (path not in urllist):
if "webuser" not in request.session:
return redirect(reverse("web_login"))
......
启动工程,清理缓存,访问localhost:8000/web,跳转到了登录页面,正常
好了,登录校验和登录中间件就说到这,下一篇文章讲大堂点餐的购物车。
#头条创作挑战赛#
页面更新:2024-04-26
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号