首页 > 其他分享 >美多商城用户注册-账号登录-多账号登录-首页用户名展示-退出登录-判断用户是否登录-9

美多商城用户注册-账号登录-多账号登录-首页用户名展示-退出登录-判断用户是否登录-9

时间:2024-01-29 16:34:54浏览次数:29  
标签:username return 登录 用户注册 账号 request next user

1.单用户名登录逻辑分析

2.用户名登录接口设计

3.用户名登录接口定义,后端代码需要在users中的 views视图中添加,前端login.js  login.html添加到对应的目录中

然后添加子路由  re_path(r'^login/$', views.LoginView.as_view(), name='login'),

class LoginView(View):
"""用户登录"""
def get(self, request):
"""提供用户登录页面"""
return render(request, 'login.html')
def post(self, request):
"""实现用户登录逻辑"""
# 接收参数
username = request.POST.get('username')
password = request.POST.get('password')
remembered = request.POST.get('remembered')

# 校验参数
if not all([username , password]):
return http.HttpResponseForbidden('缺少必传参数')
# 判断用户名是否是5-20个字符
if not re.match(r'^[a-zA-Z0-9_-]{5,20}$', username):
return http.HttpResponseForbidden('请输入正确的用户名或手机号')
# 判断密码是否是8-20个数字
if not re.match(r'^[0-9A-Za-z]{8,20}$', password):
return http.HttpResponseForbidden('密码最少8位,最长20位')

# 认证用户:使用账号查询账号是否存在,存在 再去校验密码
user = authenticate(username=username, password=password)
if user is None:
return render(request, 'login.html', {'account_errmsg':'账号或密码错误'})

# 状态保持
login(request, user)

# 使用remembered确定状态保持周期(实现记录登录)
if remembered != 'on':
# 没有记录登录:状态保持在浏览器会话结束后就销毁 单位是秒 0
request.session.set_expiry(0)
else:
# 记住登录:状态保持周期为两周:默认是两周
request.session.set_expiry(None)

# # 响应结果
# # 先取出next
# next = request.GET.get('next')
# if next:
# # 重定向到next
# response = redirect(next)
# else:
# # 重定向到首页
# response = redirect(reverse('contents:index'))

#响应结果:重定向到首页
# 先取出next
next = request.GET.get('next')
if next:
# 重定向到next
response = redirect(next)
else:

response = redirect(reverse('contents:index'))

# 为了实现在首页的右上角显示用户名信息,我们需要将用户名缓存到cookie中
response.set_cookie('username', user.username, max_age=3600 * 24 * 15)

#响应结果:重定向到首页
return response

 1.多账号登录

2.自定义多用户后端认证,在users中创建utils python文件,名字随意。

然后再settings中的dev.py中添加自定义后端代码    AUTHENTICATION_BACKENDS = ['users.utils.UsernameMobileBackend']

#自定义用户认证后端,实现多账号登录
import re
from users.models import User
from django.contrib.auth.backends import ModelBackend

# 校验username是用户名还是手机号 使用账号查询用户 封装成函数
def get_user_by_account(account):
try:
if re.match(r'^1[3-9]\d{9}$', account):
# 如果username == 手机号
user = User.objects.get(mobile=account)
else:
# 如果username == 用户名
user = User.objects.get(username=account)
except User.DoesNotExist:
return None
else:
return user


class UsernameMobileBackend(ModelBackend):
"""自定义用户认证后端"""
def authenticate(self, request, username=None, password=None, **kwargs):
"""重写用户认证方法"""
# username 用户名或者手机号
# password 密码铭文
# kwargs 额外参数
# return user 返回用户
# 查询用户
user= get_user_by_account(username)
# 如果可以查询到用户,需要验证密码是否正确
if user and user.check_password(password):
# 返回user
return user
else:
return None

# 返回user

3.测试结果,如果注册账号后,数据库会存用户名还有手机号,然后设置多用户登录后,用户名手机号都可以登录了如图

 

 1.首页用户名展示,登录后显示,导入index.html index.js文件

方法:

  Vue读取cookie渲染的用户信息,在index.html中添加如下

<div v-if="username" class="login_btn fl">
欢迎您:<em>[[ username ]]</em>
<span>|</span>
<a href="{{ url('users:logout') }}" class="quit">退出</a>
</div>
<div v-else class="login_btn fl">
<a href="login">登录</a>
<span>|</span>
<a href="register">注册</a>
</div>

2.将用户写入cookie中,然后在users中的views中的 登录模块和注册模块分别添加如下代码

3.完成

 

1.退出登录logout()方法

logout(request)

2.logout()方法使用,在users中的views中添加logoutView()类  

然后添加子路由  re_path(r'^logout/$', views.LogoutView.as_view(), name='logout'),

class LogoutView(View):
"""用户退出登录"""
def get(self, request):
# """实现用户退出登录
# """清除状态保持"""
logout(request)
# 退出登录后重定向到首页
response = redirect(reverse('contents:index'))
#删除cookie中的用户名
response.delete_cookie('username')
# 响应结果
return response

1.判断用户是否登录,展示用户中心界面,在users中views中创建UserInfoView()

然后添加子路由  re_path('info/', views.UserInfoView.as_view(), name='info'),

在dev.py中添加   LOGIN_URL = '/login/'

# 判断用户是否重复登录,指定未登录用户重定向地址
LoginRequiredMixin 自带判断用户是否登录
class UserInfoView(LoginRequiredMixin, View):
"""用户中心页面"""

def get(self, request):
"""提供用户中心页面"""
#判断用户是否登录
# if request.user.is_authenticated:
# return render(request, 'user_center_info.html')
# else:
# return redirect(reverse('users:login'))
return render(request, 'user_center_info.html')

 

1.登录时候的next参数使用,在users中views中的用户登录模块修改

next作用记录了用户未登录时访问的地址信息:例如 当你未登录访问用户中心的时候是 A图  next是用于你登录后 直接跳转到A图

代码如下

next = request.GET.get('next')
if next:
# 重定向到next
response = redirect(next)
else:

response = redirect(reverse('contents:index'))

# 为了实现在首页的右上角显示用户名信息,我们需要将用户名缓存到cookie中
response.set_cookie('username', user.username, max_age=3600 * 24 * 15)
#响应结果:重定向到首页
return response

 

标签:username,return,登录,用户注册,账号,request,next,user
From: https://www.cnblogs.com/Su-per-man/p/17994808

相关文章

  • 古诗文网模拟登录
    古诗文网模拟登陆(含验证码识别)一、首先我们需要进如未登录页面(https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx)url='https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'获得以上内容(注意:需要......
  • 揭秘亚马逊鲲鹏系统:打造独立账号环境,实现多账号管理
    在当今繁忙的电商运营中,多账号管理而不被关联是许多卖家追求的目标。为了实现这一目标,防指纹软件成为了必不可少的利器。其中,基于防指纹浏览器开发的全自动操作软件——亚马逊鲲鹏系统,成为了众多卖家的首选,其功能之齐全令人称道。亚马逊鲲鹏系统不仅可以批量注册亚马逊买家号,还能自......
  • go中间件实现登录验证
    一、概述在java中可以使用过滤器、拦截器实现登录验证(验证token的有效性、判断哪些路径需要登录、哪些路径不需要登录)等等的一些公共性的验证操作。go语言中有没有类似的东西呢,答案是有的,go语言中可以使用中间件来完成这个操作。接下来使用gin+中间件的形式来验证t......
  • 注册和登录后端逻辑
    注册逻辑:用户在前端输入账户和密码、以及校验码(todo)校验用户的账户、密码、校验密码,是否符合要求非空账户长度不小于4位密码就不小于8位账户不能重复账户不包含特殊字符密码和校验密码相同对密码进行加密(密码千万不要直接以明文存储到数据库中)向数据库插入用户数......
  • 登录认证引入(JWT令牌)
    //ArticleControllerpackagecom.di.bigevent.controller;importcom.di.bigevent.pojo.Result;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.anno......
  • 【小记】Docker容器间SSH公钥自动交换实现免密登录的一次尝试
    咋想到这茬了最近开始忙毕设的事儿了,想部署个伪分布式的Spark+Hadoop集群来进行测试。思来考去,最终咱把目光放在了Docker上。盘了两天,发现这玩意意外的有趣,镜像构建好后开箱即用,省去了些配置环境的成本。不过呢,在配置Hadoop的时候我发现了一个问题——Hadoop分布式搭建要求各......
  • 数据库安全||MySQL数据库安全中MySQL权限表:包括用户管理、权限管理等&用户管理:创建、
    MySQL数据库安全:MySQL数据库安全:MySQL权限表:包括用户管理、权限管理等。用户管理:创建、修改、删除用户账号。权限管理:查看、授予和撤销用户权限。1.MySQL数据库中的权限表是存储用户权限信息的核心部分,它们位于mysql数据库中。这些权限表包含了用户账号、密码、权限以及其他与用户......
  • docker安装宝塔面板并跳过强制绑定账号
    1.下载镜像dockerpullbtpanel/bt2.启动dockerrun-itd--net=host--restart=always-v/data/app:/opt--namebaotacyberbolt/baota:latest这里映射目录是为了上传的文件,宿主机可以看到3.跳过强制绑定账号:进入容器执行下面脚本rm-rf/www/server/panel/dat......
  • 单点登录(SSO)实现详解!!!
    单点登录是什么?你是怎么理解的?单点登录是如何实现的普通登录提到单点登录,首先可以想到传统登录,通过登录页面根据用户名查询用户信息,判断密码是否正确,正确则将用户信息写到session,访问的时候通过从session中获取用户信息,判断是否已登录,登录则允许访问。普通登录的缺点由于sessi......
  • C#_登录_普通
    写在Login.aspx<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Login-复制.aspx.cs"Inherits="Login"%><!DOCTYPEhtml><htmlxmlns="http://www.w3.org/1999/xhtml"><headrunat......