- 本节完成移动端会员登录/注册和退出操作,。
(1). 编辑视图文件index.py (2). 配置登录退出url路由 (3). 在中间件中添加移动端登录过滤 (4). 套用登录模板文件
=========================================================================
(1). 在中间件中添加移动端点餐登录过滤
- 打开中间件文件:myadmin/shopmiddleware.py 的__call__(self, request)方法中添加代码如下
....
# 判断移动端是否登录
# 定义移动端不用登录也可访问的路由url
urllist = ['/mobile/register', '/mobile/doregister']
# 判断当前请求url是否是以/mobile开头,并且path不在urllist中
if re.match(r"^/mobile", path) and (path not in urllist):
# 判断当是否登录(在于session中有没有mobileuser)
if "mobileuser" not in request.session:
# 执行登录界面跳转
return redirect(reverse('mobile_register'))
...... (2). 编辑视图文件 -
在数据库 osdb 中已存在数据表member,并且内有测试数据。
-
在common应用目录中的myobject/myadmin/models.py 模型文件中,已存在Member模型类的定义。
-
打开视图文件:myobject/mobile/views/index.py 视图文件,并进行编辑
from django.shortcuts import render
from django.http import HttpResponse
from django.shortcuts import redirect
from django.urls import reverse
from datetime import datetime
from myadmin.models import Member
# Create your views here.
def index(request):
'''移动端首页'''
return render(request,"mobile/index.html")
def register(request):
'''加载注册/登录页面'''
return render(request,"mobile/register.html")
def doRegister(request):
'''执行注册/登录'''
#获取验证码(现在没有接入短信,所以就先模拟短信验证)
verifycode = '1234' #request.session['verifycode']
if verifycode != request.POST['code']:
context = {'info':'验证码错误'}
return render(request,'mobile/register.html',context)
try:
#根据手机号获取当前会员信息
member = Member.objects.get(mobile=request.POST['mobile'])
except Exception as err:
print(err)
#此处执行当前会员注册
ob = Member()
ob = Member()
ob.nickname = "顾客" # 默认会员名称
ob.avatar = "moren.png" # 默认头像
ob.mobile = request.POST['mobile'] # 手机号码
ob.status = 1
# ob.create_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# ob.update_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
ob.save()
member = ob
# context = {'info':'此账户信息不存在!'}
# return render(request,'mobile/register.html',context)
# 检验当前会员状态
if member.status == 1: # 1代表正常用户
# 将当前会员信息转成字典格式并存放到session中
request.session['mobileuser'] = member.toDict()
# 重定向到登录页
return redirect(reverse('mobile_index'))
else:
context = {'info': '此账户信息禁用!'}
return render(request, 'mobile/register.html')
def shop(request):
''' 呈现店铺选择页面 '''
return render(request,"mobile/shop.html")
def selectShop(request):
''' 执行店铺选择 '''
# 选择好店铺后会跳转到移动端首页
pass
def addOrders(request):
''' 加载准备下订单页,由会员确认 '''
del request.session['mobileuser']
return redirect(reverse('mobile_register')) - 打开视图文件:myobject/mobile/views/member.py 视图文件,并进行编辑
-
from django.shortcuts import render
from django.http import HttpResponse
from django.shortcuts import redirect
from django.urls import reverse
# 移动端个人中心
def index(request):
'''个人中心首页'''
return render(request,"mobile/member.html")
def orders(request):
'''浏览会员订单'''
return render(request,"mobile/member_orders.html")
def detail(request):
'''浏览会员订单详情'''
return render(request,"mobile/member_detail.html")
def logout(request):
'''执行会员退出'''
del request.session['mobileuser']
return redirect(reverse('mobile_register'))
(3). 项目urls路由信息配置
- 打开根路由文件:myobject/mobile/urls.py路由文件,编辑路由配置信息
from django.urls import path
from mobile.views import index
from mobile.views import member
urlpatterns = [
path('', index.index, name="mobile_index"), #移动首页
# 移动端会员注册/登录路由
path('register', index.register, name="mobile_register"),
path('doregister', index.doregister, name="mobile_doregister"),
# ... ...
# 会员中心
path('member/logout', member.logout, name="mobile_member_logout"), #会员退出
# ... ...
]
....
# 判断移动端是否登录
# 定义移动端不用登录也可访问的路由url
urllist = ['/mobile/register', '/mobile/doregister']
# 判断当前请求url是否是以/mobile开头,并且path不在urllist中
if re.match(r"^/mobile", path) and (path not in urllist):
# 判断当是否登录(在于session中有没有mobileuser)
if "mobileuser" not in request.session:
# 执行登录界面跳转
return redirect(reverse('mobile_register'))
...... (2). 编辑视图文件 在数据库 osdb 中已存在数据表member,并且内有测试数据。
在common应用目录中的myobject/myadmin/models.py 模型文件中,已存在Member模型类的定义。
打开视图文件:myobject/mobile/views/index.py 视图文件,并进行编辑
from django.shortcuts import render
from django.http import HttpResponse
from django.shortcuts import redirect
from django.urls import reverse
from datetime import datetime
from myadmin.models import Member
# Create your views here.
def index(request):
'''移动端首页'''
return render(request,"mobile/index.html")
def register(request):
'''加载注册/登录页面'''
return render(request,"mobile/register.html")
def doRegister(request):
'''执行注册/登录'''
#获取验证码(现在没有接入短信,所以就先模拟短信验证)
verifycode = '1234' #request.session['verifycode']
if verifycode != request.POST['code']:
context = {'info':'验证码错误'}
return render(request,'mobile/register.html',context)
try:
#根据手机号获取当前会员信息
member = Member.objects.get(mobile=request.POST['mobile'])
except Exception as err:
print(err)
#此处执行当前会员注册
ob = Member()
ob = Member()
ob.nickname = "顾客" # 默认会员名称
ob.avatar = "moren.png" # 默认头像
ob.mobile = request.POST['mobile'] # 手机号码
ob.status = 1
# ob.create_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# ob.update_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
ob.save()
member = ob
# context = {'info':'此账户信息不存在!'}
# return render(request,'mobile/register.html',context)
# 检验当前会员状态
if member.status == 1: # 1代表正常用户
# 将当前会员信息转成字典格式并存放到session中
request.session['mobileuser'] = member.toDict()
# 重定向到登录页
return redirect(reverse('mobile_index'))
else:
context = {'info': '此账户信息禁用!'}
return render(request, 'mobile/register.html')
def shop(request):
''' 呈现店铺选择页面 '''
return render(request,"mobile/shop.html")
def selectShop(request):
''' 执行店铺选择 '''
# 选择好店铺后会跳转到移动端首页
pass
def addOrders(request):
''' 加载准备下订单页,由会员确认 '''
del request.session['mobileuser']
return redirect(reverse('mobile_register')) from django.shortcuts import render
from django.http import HttpResponse
from django.shortcuts import redirect
from django.urls import reverse
# 移动端个人中心
def index(request):
'''个人中心首页'''
return render(request,"mobile/member.html")
def orders(request):
'''浏览会员订单'''
return render(request,"mobile/member_orders.html")
def detail(request):
'''浏览会员订单详情'''
return render(request,"mobile/member_detail.html")
def logout(request):
'''执行会员退出'''
del request.session['mobileuser']
return redirect(reverse('mobile_register')) - 打开根路由文件:myobject/mobile/urls.py路由文件,编辑路由配置信息
from django.urls import path
from mobile.views import index
from mobile.views import member
urlpatterns = [
path('', index.index, name="mobile_index"), #移动首页
# 移动端会员注册/登录路由
path('register', index.register, name="mobile_register"),
path('doregister', index.doregister, name="mobile_doregister"),
# ... ...
# 会员中心
path('member/logout', member.logout, name="mobile_member_logout"), #会员退出
# ... ...
]
(4). 编写登录模板文件
- 编辑项目移动端 "登录/注册" 页模板:/templates/web/login.html
-
{% extends 'mobile/base.html' %}
{% load static %}
{% block mainbody %}
登录
测试验证码:1234
{{info}}
{% endblock %}
{% block myjavascript %}
{% endblock %} 这里登录用的是表单提交,post方法
{% extends 'mobile/base.html' %}
{% load static %}
{% block mainbody %}
登录
测试验证码:1234
{{info}}
{% endblock %}
{% block myjavascript %}
{% endblock %} 这里登录用的是表单提交,post方法
- 编辑项目移动端 "会员中心" 页模板:/templates/web/member.html
-
{% extends 'mobile/base.html' %} {% load static %} {% block mainbody %}- {{request.session.mobileuser.mobile}}
- 我的订单
- 我的资料
- 修改密码
- 优惠券
- 收货地址
- 退出 {% endblock %}



